@yaswap/evm-contracts 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md ADDED
@@ -0,0 +1,5 @@
1
+ # @yaswap/evm-contracts
2
+
3
+ ## 2.0.0
4
+
5
+ - First version
package/README.md ADDED
@@ -0,0 +1,115 @@
1
+ # Liquality HTLC
2
+
3
+ ## Gas usage
4
+
5
+ ### Ether HTLC
6
+
7
+ <img width="900" alt="Screenshot 2022-01-27 at 16 25 27" src="https://user-images.githubusercontent.com/7030722/151378268-0c503bc1-5915-4e9e-8825-1a0892074bef.png">
8
+
9
+ ### ERC20 HTLC
10
+
11
+ <img width="903" alt="Screenshot 2022-01-27 at 16 26 07" src="https://user-images.githubusercontent.com/7030722/151378336-de923bf3-d743-4941-a6e1-f8dc18e9ddd4.png">
12
+
13
+ ### Coverage
14
+
15
+ <img width="741" alt="Screenshot 2022-01-27 at 16 28 40" src="https://user-images.githubusercontent.com/7030722/151378625-715934a4-f358-4712-bc8f-840ba2a2f179.png">
16
+
17
+ ## Usage
18
+
19
+ ### Pre Requisites
20
+
21
+ Before running any command, you need to create a `.env` file and set a BIP-39 compatible mnemonic as an environment
22
+ variable. Follow the example in `.env.example`. If you don't already have a mnemonic, use this [website](https://iancoleman.io/bip39/) to generate one.
23
+
24
+ Then, proceed with installing dependencies:
25
+
26
+ ```sh
27
+ yarn install
28
+ ```
29
+
30
+ ### Compile
31
+
32
+ Compile the smart contracts with Hardhat:
33
+
34
+ ```sh
35
+ $ yarn compile
36
+ ```
37
+
38
+ ### TypeChain
39
+
40
+ Compile the smart contracts and generate TypeChain artifacts:
41
+
42
+ ```sh
43
+ $ yarn typechain
44
+ ```
45
+
46
+ ### Lint Solidity
47
+
48
+ Lint the Solidity code:
49
+
50
+ ```sh
51
+ $ yarn lint:sol
52
+ ```
53
+
54
+ ### Lint TypeScript
55
+
56
+ Lint the TypeScript code:
57
+
58
+ ```sh
59
+ $ yarn lint:ts
60
+ ```
61
+
62
+ ### Test
63
+
64
+ Run the Mocha tests:
65
+
66
+ ```sh
67
+ $ yarn test
68
+ ```
69
+
70
+ ### Coverage
71
+
72
+ Generate the code coverage report:
73
+
74
+ ```sh
75
+ $ yarn coverage
76
+ ```
77
+
78
+ ### Report Gas
79
+
80
+ See the gas usage per unit test and average gas per method call:
81
+
82
+ ```sh
83
+ $ REPORT_GAS=true yarn test
84
+ ```
85
+
86
+ ### Clean
87
+
88
+ Delete the smart contract artifacts, the coverage reports and the Hardhat cache:
89
+
90
+ ```sh
91
+ $ yarn clean
92
+ ```
93
+
94
+ ### Deploy
95
+
96
+ Deploy the contracts to Hardhat Network:
97
+
98
+ ```sh
99
+ $ yarn deploy --greeting "Bonjour, le monde!"
100
+ ```
101
+
102
+ ## Syntax Highlighting
103
+
104
+ If you use VSCode, you can enjoy syntax highlighting for your Solidity code via the
105
+ [vscode-solidity](https://github.com/juanfranblanco/vscode-solidity) extension. The recommended approach to set the
106
+ compiler version is to add the following fields to your VSCode user settings:
107
+
108
+ ```json
109
+ {
110
+ "solidity.compileUsingRemoteVersion": "v0.8.4+commit.c7e474f2",
111
+ "solidity.defaultCompiler": "remote"
112
+ }
113
+ ```
114
+
115
+ Where of course `v0.8.4+commit.c7e474f2` can be replaced with any other version.
@@ -0,0 +1,216 @@
1
+ {
2
+ "_format": "hh-sol-artifact-1",
3
+ "contractName": "ILiqualityHTLC",
4
+ "sourceName": "contracts/ILiqualityHTLC.sol",
5
+ "abi": [
6
+ {
7
+ "inputs": [],
8
+ "name": "LiqualityHTLC__InvalidExpiration",
9
+ "type": "error"
10
+ },
11
+ {
12
+ "inputs": [],
13
+ "name": "LiqualityHTLC__InvalidMsgValue",
14
+ "type": "error"
15
+ },
16
+ {
17
+ "inputs": [],
18
+ "name": "LiqualityHTLC__InvalidSender",
19
+ "type": "error"
20
+ },
21
+ {
22
+ "inputs": [],
23
+ "name": "LiqualityHTLC__InvalidSwapAmount",
24
+ "type": "error"
25
+ },
26
+ {
27
+ "inputs": [],
28
+ "name": "LiqualityHTLC__SwapAlreadyExists",
29
+ "type": "error"
30
+ },
31
+ {
32
+ "inputs": [],
33
+ "name": "LiqualityHTLC__SwapDoesNotExist",
34
+ "type": "error"
35
+ },
36
+ {
37
+ "inputs": [],
38
+ "name": "LiqualityHTLC__SwapNotExpired",
39
+ "type": "error"
40
+ },
41
+ {
42
+ "inputs": [],
43
+ "name": "LiqualityHTLC__WrongSecret",
44
+ "type": "error"
45
+ },
46
+ {
47
+ "anonymous": false,
48
+ "inputs": [
49
+ {
50
+ "indexed": true,
51
+ "internalType": "bytes32",
52
+ "name": "id",
53
+ "type": "bytes32"
54
+ },
55
+ {
56
+ "indexed": false,
57
+ "internalType": "bytes32",
58
+ "name": "secret",
59
+ "type": "bytes32"
60
+ }
61
+ ],
62
+ "name": "Claim",
63
+ "type": "event"
64
+ },
65
+ {
66
+ "anonymous": false,
67
+ "inputs": [
68
+ {
69
+ "indexed": false,
70
+ "internalType": "bytes32",
71
+ "name": "id",
72
+ "type": "bytes32"
73
+ },
74
+ {
75
+ "components": [
76
+ {
77
+ "internalType": "uint256",
78
+ "name": "amount",
79
+ "type": "uint256"
80
+ },
81
+ {
82
+ "internalType": "uint256",
83
+ "name": "expiration",
84
+ "type": "uint256"
85
+ },
86
+ {
87
+ "internalType": "bytes32",
88
+ "name": "secretHash",
89
+ "type": "bytes32"
90
+ },
91
+ {
92
+ "internalType": "address",
93
+ "name": "tokenAddress",
94
+ "type": "address"
95
+ },
96
+ {
97
+ "internalType": "address",
98
+ "name": "refundAddress",
99
+ "type": "address"
100
+ },
101
+ {
102
+ "internalType": "address",
103
+ "name": "recipientAddress",
104
+ "type": "address"
105
+ }
106
+ ],
107
+ "indexed": false,
108
+ "internalType": "struct ILiqualityHTLC.HTLCData",
109
+ "name": "htlc",
110
+ "type": "tuple"
111
+ }
112
+ ],
113
+ "name": "Initiate",
114
+ "type": "event"
115
+ },
116
+ {
117
+ "anonymous": false,
118
+ "inputs": [
119
+ {
120
+ "indexed": true,
121
+ "internalType": "bytes32",
122
+ "name": "id",
123
+ "type": "bytes32"
124
+ }
125
+ ],
126
+ "name": "Refund",
127
+ "type": "event"
128
+ },
129
+ {
130
+ "inputs": [
131
+ {
132
+ "internalType": "bytes32",
133
+ "name": "id",
134
+ "type": "bytes32"
135
+ },
136
+ {
137
+ "internalType": "bytes32",
138
+ "name": "secret",
139
+ "type": "bytes32"
140
+ }
141
+ ],
142
+ "name": "claim",
143
+ "outputs": [],
144
+ "stateMutability": "nonpayable",
145
+ "type": "function"
146
+ },
147
+ {
148
+ "inputs": [
149
+ {
150
+ "components": [
151
+ {
152
+ "internalType": "uint256",
153
+ "name": "amount",
154
+ "type": "uint256"
155
+ },
156
+ {
157
+ "internalType": "uint256",
158
+ "name": "expiration",
159
+ "type": "uint256"
160
+ },
161
+ {
162
+ "internalType": "bytes32",
163
+ "name": "secretHash",
164
+ "type": "bytes32"
165
+ },
166
+ {
167
+ "internalType": "address",
168
+ "name": "tokenAddress",
169
+ "type": "address"
170
+ },
171
+ {
172
+ "internalType": "address",
173
+ "name": "refundAddress",
174
+ "type": "address"
175
+ },
176
+ {
177
+ "internalType": "address",
178
+ "name": "recipientAddress",
179
+ "type": "address"
180
+ }
181
+ ],
182
+ "internalType": "struct ILiqualityHTLC.HTLCData",
183
+ "name": "htlc",
184
+ "type": "tuple"
185
+ }
186
+ ],
187
+ "name": "initiate",
188
+ "outputs": [
189
+ {
190
+ "internalType": "bytes32",
191
+ "name": "",
192
+ "type": "bytes32"
193
+ }
194
+ ],
195
+ "stateMutability": "payable",
196
+ "type": "function"
197
+ },
198
+ {
199
+ "inputs": [
200
+ {
201
+ "internalType": "bytes32",
202
+ "name": "id",
203
+ "type": "bytes32"
204
+ }
205
+ ],
206
+ "name": "refund",
207
+ "outputs": [],
208
+ "stateMutability": "nonpayable",
209
+ "type": "function"
210
+ }
211
+ ],
212
+ "bytecode": "0x",
213
+ "deployedBytecode": "0x",
214
+ "linkReferences": {},
215
+ "deployedLinkReferences": {}
216
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "_format": "hh-sol-artifact-1",
3
+ "contractName": "LibTransfer",
4
+ "sourceName": "contracts/LibTransfer.sol",
5
+ "abi": [],
6
+ "bytecode": "0x602d6037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea164736f6c634300080b000a",
7
+ "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600080fdfea164736f6c634300080b000a",
8
+ "linkReferences": {},
9
+ "deployedLinkReferences": {}
10
+ }
@@ -0,0 +1,260 @@
1
+ {
2
+ "_format": "hh-sol-artifact-1",
3
+ "contractName": "LiqualityHTLC",
4
+ "sourceName": "contracts/LiqualityHTLC.sol",
5
+ "abi": [
6
+ {
7
+ "inputs": [],
8
+ "name": "LiqualityHTLC__InvalidExpiration",
9
+ "type": "error"
10
+ },
11
+ {
12
+ "inputs": [],
13
+ "name": "LiqualityHTLC__InvalidMsgValue",
14
+ "type": "error"
15
+ },
16
+ {
17
+ "inputs": [],
18
+ "name": "LiqualityHTLC__InvalidSender",
19
+ "type": "error"
20
+ },
21
+ {
22
+ "inputs": [],
23
+ "name": "LiqualityHTLC__InvalidSwapAmount",
24
+ "type": "error"
25
+ },
26
+ {
27
+ "inputs": [],
28
+ "name": "LiqualityHTLC__SwapAlreadyExists",
29
+ "type": "error"
30
+ },
31
+ {
32
+ "inputs": [],
33
+ "name": "LiqualityHTLC__SwapDoesNotExist",
34
+ "type": "error"
35
+ },
36
+ {
37
+ "inputs": [],
38
+ "name": "LiqualityHTLC__SwapNotExpired",
39
+ "type": "error"
40
+ },
41
+ {
42
+ "inputs": [],
43
+ "name": "LiqualityHTLC__WrongSecret",
44
+ "type": "error"
45
+ },
46
+ {
47
+ "anonymous": false,
48
+ "inputs": [
49
+ {
50
+ "indexed": true,
51
+ "internalType": "bytes32",
52
+ "name": "id",
53
+ "type": "bytes32"
54
+ },
55
+ {
56
+ "indexed": false,
57
+ "internalType": "bytes32",
58
+ "name": "secret",
59
+ "type": "bytes32"
60
+ }
61
+ ],
62
+ "name": "Claim",
63
+ "type": "event"
64
+ },
65
+ {
66
+ "anonymous": false,
67
+ "inputs": [
68
+ {
69
+ "indexed": false,
70
+ "internalType": "bytes32",
71
+ "name": "id",
72
+ "type": "bytes32"
73
+ },
74
+ {
75
+ "components": [
76
+ {
77
+ "internalType": "uint256",
78
+ "name": "amount",
79
+ "type": "uint256"
80
+ },
81
+ {
82
+ "internalType": "uint256",
83
+ "name": "expiration",
84
+ "type": "uint256"
85
+ },
86
+ {
87
+ "internalType": "bytes32",
88
+ "name": "secretHash",
89
+ "type": "bytes32"
90
+ },
91
+ {
92
+ "internalType": "address",
93
+ "name": "tokenAddress",
94
+ "type": "address"
95
+ },
96
+ {
97
+ "internalType": "address",
98
+ "name": "refundAddress",
99
+ "type": "address"
100
+ },
101
+ {
102
+ "internalType": "address",
103
+ "name": "recipientAddress",
104
+ "type": "address"
105
+ }
106
+ ],
107
+ "indexed": false,
108
+ "internalType": "struct ILiqualityHTLC.HTLCData",
109
+ "name": "htlc",
110
+ "type": "tuple"
111
+ }
112
+ ],
113
+ "name": "Initiate",
114
+ "type": "event"
115
+ },
116
+ {
117
+ "anonymous": false,
118
+ "inputs": [
119
+ {
120
+ "indexed": true,
121
+ "internalType": "bytes32",
122
+ "name": "id",
123
+ "type": "bytes32"
124
+ }
125
+ ],
126
+ "name": "Refund",
127
+ "type": "event"
128
+ },
129
+ {
130
+ "inputs": [
131
+ {
132
+ "internalType": "bytes32",
133
+ "name": "id",
134
+ "type": "bytes32"
135
+ },
136
+ {
137
+ "internalType": "bytes32",
138
+ "name": "secret",
139
+ "type": "bytes32"
140
+ }
141
+ ],
142
+ "name": "claim",
143
+ "outputs": [],
144
+ "stateMutability": "nonpayable",
145
+ "type": "function"
146
+ },
147
+ {
148
+ "inputs": [
149
+ {
150
+ "internalType": "bytes32",
151
+ "name": "",
152
+ "type": "bytes32"
153
+ }
154
+ ],
155
+ "name": "htlcs",
156
+ "outputs": [
157
+ {
158
+ "internalType": "uint256",
159
+ "name": "amount",
160
+ "type": "uint256"
161
+ },
162
+ {
163
+ "internalType": "uint256",
164
+ "name": "expiration",
165
+ "type": "uint256"
166
+ },
167
+ {
168
+ "internalType": "bytes32",
169
+ "name": "secretHash",
170
+ "type": "bytes32"
171
+ },
172
+ {
173
+ "internalType": "address",
174
+ "name": "tokenAddress",
175
+ "type": "address"
176
+ },
177
+ {
178
+ "internalType": "address",
179
+ "name": "refundAddress",
180
+ "type": "address"
181
+ },
182
+ {
183
+ "internalType": "address",
184
+ "name": "recipientAddress",
185
+ "type": "address"
186
+ }
187
+ ],
188
+ "stateMutability": "view",
189
+ "type": "function"
190
+ },
191
+ {
192
+ "inputs": [
193
+ {
194
+ "components": [
195
+ {
196
+ "internalType": "uint256",
197
+ "name": "amount",
198
+ "type": "uint256"
199
+ },
200
+ {
201
+ "internalType": "uint256",
202
+ "name": "expiration",
203
+ "type": "uint256"
204
+ },
205
+ {
206
+ "internalType": "bytes32",
207
+ "name": "secretHash",
208
+ "type": "bytes32"
209
+ },
210
+ {
211
+ "internalType": "address",
212
+ "name": "tokenAddress",
213
+ "type": "address"
214
+ },
215
+ {
216
+ "internalType": "address",
217
+ "name": "refundAddress",
218
+ "type": "address"
219
+ },
220
+ {
221
+ "internalType": "address",
222
+ "name": "recipientAddress",
223
+ "type": "address"
224
+ }
225
+ ],
226
+ "internalType": "struct ILiqualityHTLC.HTLCData",
227
+ "name": "htlc",
228
+ "type": "tuple"
229
+ }
230
+ ],
231
+ "name": "initiate",
232
+ "outputs": [
233
+ {
234
+ "internalType": "bytes32",
235
+ "name": "id",
236
+ "type": "bytes32"
237
+ }
238
+ ],
239
+ "stateMutability": "payable",
240
+ "type": "function"
241
+ },
242
+ {
243
+ "inputs": [
244
+ {
245
+ "internalType": "bytes32",
246
+ "name": "id",
247
+ "type": "bytes32"
248
+ }
249
+ ],
250
+ "name": "refund",
251
+ "outputs": [],
252
+ "stateMutability": "nonpayable",
253
+ "type": "function"
254
+ }
255
+ ],
256
+ "bytecode": "0x608060405234801561001057600080fd5b50610cfd806100206000396000f3fe60806040526004361061003f5760003560e01c8063337bc2fa146100445780637249fbb61461006a57806384cc9dfb1461008c57806391edd8f2146100ac575b600080fd5b610057610052366004610a95565b610147565b6040519081526020015b60405180910390f35b34801561007657600080fd5b5061008a610085366004610aad565b61036d565b005b34801561009857600080fd5b5061008a6100a7366004610ac6565b6104c8565b3480156100b857600080fd5b5061010b6100c7366004610aad565b6000602081905290815260409020805460018201546002830154600384015460048501546005909501549394929391926001600160a01b0391821692908216911686565b604080519687526020870195909552938501929092526001600160a01b03908116606085015290811660808401521660a082015260c001610061565b6000428260200135101561016e5760405163e7ec8bc960e01b815260040160405180910390fd5b813561018d57604051639f7fe22f60e01b815260040160405180910390fd5b600061019f6080840160608501610b00565b6001600160a01b031614156101d457813534146101cf576040516309a9fccd60e01b815260040160405180910390fd5b61021b565b34156101f3576040516309a9fccd60e01b815260040160405180910390fd5b61021b3330843561020a6080870160608801610b00565b6001600160a01b03169291906106a0565b600261022d60a0840160808501610b00565b4284356020860135604087013561024a60c0890160a08a01610b00565b604080516001600160a01b039788166020820152908101959095526060850193909352608084019190915260a083015290911660c082015260e00160408051601f198184030181529082905261029f91610b49565b602060405180830381855afa1580156102bc573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906102df9190610b65565b600081815260208190526040902060010154909150156103125760405163908b86b760e01b815260040160405180910390fd5b6000818152602081905260409020829061032c8282610b7e565b9050507f3c07675a13dc2c3d44c781f9dd3db9ac3a9cc543a5f46777f7bd60a942cf6eb78183604051610360929190610c1e565b60405180910390a1919050565b60008181526020818152604091829020825160c08101845281548152600182015492810183905260028201549381019390935260038101546001600160a01b0390811660608501526004820154811660808501526005909101541660a08301526103ea5760405163501a3cef60e11b815260040160405180910390fd5b8060200151421161040e576040516377128aa160e11b815260040160405180910390fd5b60008281526020819052604080822082815560018101839055600281018390556003810180546001600160a01b0319908116909155600482018054821690556005909101805490911690555183917f3fbd469ec3a5ce074f975f76ce27e727ba21c99176917b97ae2e713695582a1291a260608101516001600160a01b03166104a7576104a38160800151826000015161073e565b5050565b6080810151815160608301516104a3926001600160a01b03909116916107e6565b60008281526020818152604091829020825160c08101845281548152600182015492810183905260028201549381019390935260038101546001600160a01b0390811660608501526004820154811660808501526005909101541660a08301526105455760405163501a3cef60e11b815260040160405180910390fd5b806040015160028360405160200161055f91815260200190565b60408051601f198184030181529082905261057991610b49565b602060405180830381855afa158015610596573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906105b99190610b65565b146105d7576040516392631d5760e01b815260040160405180910390fd5b6000838152602081815260408083208381556001810184905560028101939093556003830180546001600160a01b03199081169091556004840180548216905560059093018054909316909255905183815284917f5664142af3dcfc3dc3de45a43f75c746bd1d8c11170a5037fdf98bdb35775137910160405180910390a260608101516001600160a01b031661067f5761067a8160a00151826000015161073e565b505050565b60a08101518151606083015161067a926001600160a01b03909116916107e6565b6040516001600160a01b03808516602483015283166044820152606481018290526107389085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152610816565b50505050565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461078b576040519150601f19603f3d011682016040523d82523d6000602084013e610790565b606091505b505090508061067a5760405162461bcd60e51b815260206004820152600f60248201527f7472616e73666572206661696c6564000000000000000000000000000000000060448201526064015b60405180910390fd5b6040516001600160a01b03831660248201526044810182905261067a90849063a9059cbb60e01b906064016106d4565b600061086b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166108fb9092919063ffffffff16565b80519091501561067a57808060200190518101906108899190610c9b565b61067a5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016107dd565b606061090a8484600085610914565b90505b9392505050565b60608247101561098c5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016107dd565b6001600160a01b0385163b6109e35760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016107dd565b600080866001600160a01b031685876040516109ff9190610b49565b60006040518083038185875af1925050503d8060008114610a3c576040519150601f19603f3d011682016040523d82523d6000602084013e610a41565b606091505b5091509150610a51828286610a5c565b979650505050505050565b60608315610a6b57508161090d565b825115610a7b5782518084602001fd5b8160405162461bcd60e51b81526004016107dd9190610cbd565b600060c08284031215610aa757600080fd5b50919050565b600060208284031215610abf57600080fd5b5035919050565b60008060408385031215610ad957600080fd5b50508035926020909101359150565b6001600160a01b0381168114610afd57600080fd5b50565b600060208284031215610b1257600080fd5b813561090d81610ae8565b60005b83811015610b38578181015183820152602001610b20565b838111156107385750506000910152565b60008251610b5b818460208701610b1d565b9190910192915050565b600060208284031215610b7757600080fd5b5051919050565b8135815560208201356001820155604082013560028201556060820135610ba481610ae8565b6003820180546001600160a01b0319166001600160a01b038316179055506080820135610bd081610ae8565b6004820180546001600160a01b0319166001600160a01b0383161790555060a0820135610bfc81610ae8565b6005820180546001600160a01b0319166001600160a01b038316179055505050565b600060e0820190508382528235602083015260208301356040830152604083013560608301526060830135610c5281610ae8565b6001600160a01b03808216608085015260808501359150610c7282610ae8565b80821660a085015260a08501359150610c8a82610ae8565b80821660c085015250509392505050565b600060208284031215610cad57600080fd5b8151801515811461090d57600080fd5b6020815260008251806020840152610cdc816040850160208701610b1d565b601f01601f1916919091016040019291505056fea164736f6c634300080b000a",
257
+ "deployedBytecode": "0x60806040526004361061003f5760003560e01c8063337bc2fa146100445780637249fbb61461006a57806384cc9dfb1461008c57806391edd8f2146100ac575b600080fd5b610057610052366004610a95565b610147565b6040519081526020015b60405180910390f35b34801561007657600080fd5b5061008a610085366004610aad565b61036d565b005b34801561009857600080fd5b5061008a6100a7366004610ac6565b6104c8565b3480156100b857600080fd5b5061010b6100c7366004610aad565b6000602081905290815260409020805460018201546002830154600384015460048501546005909501549394929391926001600160a01b0391821692908216911686565b604080519687526020870195909552938501929092526001600160a01b03908116606085015290811660808401521660a082015260c001610061565b6000428260200135101561016e5760405163e7ec8bc960e01b815260040160405180910390fd5b813561018d57604051639f7fe22f60e01b815260040160405180910390fd5b600061019f6080840160608501610b00565b6001600160a01b031614156101d457813534146101cf576040516309a9fccd60e01b815260040160405180910390fd5b61021b565b34156101f3576040516309a9fccd60e01b815260040160405180910390fd5b61021b3330843561020a6080870160608801610b00565b6001600160a01b03169291906106a0565b600261022d60a0840160808501610b00565b4284356020860135604087013561024a60c0890160a08a01610b00565b604080516001600160a01b039788166020820152908101959095526060850193909352608084019190915260a083015290911660c082015260e00160408051601f198184030181529082905261029f91610b49565b602060405180830381855afa1580156102bc573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906102df9190610b65565b600081815260208190526040902060010154909150156103125760405163908b86b760e01b815260040160405180910390fd5b6000818152602081905260409020829061032c8282610b7e565b9050507f3c07675a13dc2c3d44c781f9dd3db9ac3a9cc543a5f46777f7bd60a942cf6eb78183604051610360929190610c1e565b60405180910390a1919050565b60008181526020818152604091829020825160c08101845281548152600182015492810183905260028201549381019390935260038101546001600160a01b0390811660608501526004820154811660808501526005909101541660a08301526103ea5760405163501a3cef60e11b815260040160405180910390fd5b8060200151421161040e576040516377128aa160e11b815260040160405180910390fd5b60008281526020819052604080822082815560018101839055600281018390556003810180546001600160a01b0319908116909155600482018054821690556005909101805490911690555183917f3fbd469ec3a5ce074f975f76ce27e727ba21c99176917b97ae2e713695582a1291a260608101516001600160a01b03166104a7576104a38160800151826000015161073e565b5050565b6080810151815160608301516104a3926001600160a01b03909116916107e6565b60008281526020818152604091829020825160c08101845281548152600182015492810183905260028201549381019390935260038101546001600160a01b0390811660608501526004820154811660808501526005909101541660a08301526105455760405163501a3cef60e11b815260040160405180910390fd5b806040015160028360405160200161055f91815260200190565b60408051601f198184030181529082905261057991610b49565b602060405180830381855afa158015610596573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906105b99190610b65565b146105d7576040516392631d5760e01b815260040160405180910390fd5b6000838152602081815260408083208381556001810184905560028101939093556003830180546001600160a01b03199081169091556004840180548216905560059093018054909316909255905183815284917f5664142af3dcfc3dc3de45a43f75c746bd1d8c11170a5037fdf98bdb35775137910160405180910390a260608101516001600160a01b031661067f5761067a8160a00151826000015161073e565b505050565b60a08101518151606083015161067a926001600160a01b03909116916107e6565b6040516001600160a01b03808516602483015283166044820152606481018290526107389085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152610816565b50505050565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461078b576040519150601f19603f3d011682016040523d82523d6000602084013e610790565b606091505b505090508061067a5760405162461bcd60e51b815260206004820152600f60248201527f7472616e73666572206661696c6564000000000000000000000000000000000060448201526064015b60405180910390fd5b6040516001600160a01b03831660248201526044810182905261067a90849063a9059cbb60e01b906064016106d4565b600061086b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166108fb9092919063ffffffff16565b80519091501561067a57808060200190518101906108899190610c9b565b61067a5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016107dd565b606061090a8484600085610914565b90505b9392505050565b60608247101561098c5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016107dd565b6001600160a01b0385163b6109e35760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016107dd565b600080866001600160a01b031685876040516109ff9190610b49565b60006040518083038185875af1925050503d8060008114610a3c576040519150601f19603f3d011682016040523d82523d6000602084013e610a41565b606091505b5091509150610a51828286610a5c565b979650505050505050565b60608315610a6b57508161090d565b825115610a7b5782518084602001fd5b8160405162461bcd60e51b81526004016107dd9190610cbd565b600060c08284031215610aa757600080fd5b50919050565b600060208284031215610abf57600080fd5b5035919050565b60008060408385031215610ad957600080fd5b50508035926020909101359150565b6001600160a01b0381168114610afd57600080fd5b50565b600060208284031215610b1257600080fd5b813561090d81610ae8565b60005b83811015610b38578181015183820152602001610b20565b838111156107385750506000910152565b60008251610b5b818460208701610b1d565b9190910192915050565b600060208284031215610b7757600080fd5b5051919050565b8135815560208201356001820155604082013560028201556060820135610ba481610ae8565b6003820180546001600160a01b0319166001600160a01b038316179055506080820135610bd081610ae8565b6004820180546001600160a01b0319166001600160a01b0383161790555060a0820135610bfc81610ae8565b6005820180546001600160a01b0319166001600160a01b038316179055505050565b600060e0820190508382528235602083015260208301356040830152604083013560608301526060830135610c5281610ae8565b6001600160a01b03808216608085015260808501359150610c7282610ae8565b80821660a085015260a08501359150610c8a82610ae8565b80821660c085015250509392505050565b600060208284031215610cad57600080fd5b8151801515811461090d57600080fd5b6020815260008251806020840152610cdc816040850160208701610b1d565b601f01601f1916919091016040019291505056fea164736f6c634300080b000a",
258
+ "linkReferences": {},
259
+ "deployedLinkReferences": {}
260
+ }