@keep-network/tbtc-v2 0.1.1-dev.4 → 0.1.1-dev.8

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.
@@ -6,12 +6,6 @@
6
6
  {
7
7
  "anonymous": false,
8
8
  "inputs": [
9
- {
10
- "indexed": false,
11
- "internalType": "uint256",
12
- "name": "depositId",
13
- "type": "uint256"
14
- },
15
9
  {
16
10
  "indexed": false,
17
11
  "internalType": "bytes32",
@@ -32,21 +26,27 @@
32
26
  },
33
27
  {
34
28
  "indexed": false,
35
- "internalType": "uint64",
29
+ "internalType": "bytes8",
36
30
  "name": "blindingFactor",
37
- "type": "uint64"
31
+ "type": "bytes8"
38
32
  },
39
33
  {
40
34
  "indexed": false,
41
- "internalType": "bytes",
42
- "name": "refundPubKey",
43
- "type": "bytes"
35
+ "internalType": "bytes20",
36
+ "name": "walletPubKeyHash",
37
+ "type": "bytes20"
44
38
  },
45
39
  {
46
40
  "indexed": false,
47
- "internalType": "uint64",
48
- "name": "amount",
49
- "type": "uint64"
41
+ "internalType": "bytes20",
42
+ "name": "refundPubKeyHash",
43
+ "type": "bytes20"
44
+ },
45
+ {
46
+ "indexed": false,
47
+ "internalType": "bytes4",
48
+ "name": "refundLocktime",
49
+ "type": "bytes4"
50
50
  },
51
51
  {
52
52
  "indexed": false,
@@ -59,39 +59,78 @@
59
59
  "type": "event"
60
60
  },
61
61
  {
62
+ "anonymous": false,
62
63
  "inputs": [
63
64
  {
64
- "internalType": "bytes32",
65
- "name": "fundingTxHash",
66
- "type": "bytes32"
65
+ "indexed": true,
66
+ "internalType": "address",
67
+ "name": "previousOwner",
68
+ "type": "address"
67
69
  },
68
70
  {
69
- "internalType": "uint8",
70
- "name": "fundingOutputIndex",
71
- "type": "uint8"
72
- },
71
+ "indexed": true,
72
+ "internalType": "address",
73
+ "name": "newOwner",
74
+ "type": "address"
75
+ }
76
+ ],
77
+ "name": "OwnershipTransferred",
78
+ "type": "event"
79
+ },
80
+ {
81
+ "anonymous": false,
82
+ "inputs": [
73
83
  {
74
- "internalType": "uint64",
75
- "name": "blindingFactor",
76
- "type": "uint64"
84
+ "indexed": true,
85
+ "internalType": "address",
86
+ "name": "vault",
87
+ "type": "address"
77
88
  },
78
89
  {
79
- "internalType": "bytes",
80
- "name": "refundPubKey",
81
- "type": "bytes"
82
- },
90
+ "indexed": false,
91
+ "internalType": "bool",
92
+ "name": "isTrusted",
93
+ "type": "bool"
94
+ }
95
+ ],
96
+ "name": "VaultStatusUpdated",
97
+ "type": "event"
98
+ },
99
+ {
100
+ "inputs": [
83
101
  {
84
- "internalType": "uint64",
85
- "name": "amount",
86
- "type": "uint64"
87
- },
102
+ "internalType": "address",
103
+ "name": "",
104
+ "type": "address"
105
+ }
106
+ ],
107
+ "name": "isVaultTrusted",
108
+ "outputs": [
109
+ {
110
+ "internalType": "bool",
111
+ "name": "",
112
+ "type": "bool"
113
+ }
114
+ ],
115
+ "stateMutability": "view",
116
+ "type": "function"
117
+ },
118
+ {
119
+ "inputs": [],
120
+ "name": "owner",
121
+ "outputs": [
88
122
  {
89
123
  "internalType": "address",
90
- "name": "vault",
124
+ "name": "",
91
125
  "type": "address"
92
126
  }
93
127
  ],
94
- "name": "revealDeposit",
128
+ "stateMutability": "view",
129
+ "type": "function"
130
+ },
131
+ {
132
+ "inputs": [],
133
+ "name": "renounceOwnership",
95
134
  "outputs": [],
96
135
  "stateMutability": "nonpayable",
97
136
  "type": "function"
@@ -99,24 +138,126 @@
99
138
  {
100
139
  "inputs": [
101
140
  {
102
- "internalType": "bytes4",
103
- "name": "txVersion",
104
- "type": "bytes4"
141
+ "components": [
142
+ {
143
+ "internalType": "bytes4",
144
+ "name": "version",
145
+ "type": "bytes4"
146
+ },
147
+ {
148
+ "internalType": "bytes",
149
+ "name": "inputVector",
150
+ "type": "bytes"
151
+ },
152
+ {
153
+ "internalType": "bytes",
154
+ "name": "outputVector",
155
+ "type": "bytes"
156
+ },
157
+ {
158
+ "internalType": "bytes4",
159
+ "name": "locktime",
160
+ "type": "bytes4"
161
+ }
162
+ ],
163
+ "internalType": "struct BitcoinTx.Info",
164
+ "name": "fundingTx",
165
+ "type": "tuple"
105
166
  },
106
167
  {
107
- "internalType": "bytes",
108
- "name": "txInputVector",
109
- "type": "bytes"
110
- },
168
+ "components": [
169
+ {
170
+ "internalType": "uint8",
171
+ "name": "fundingOutputIndex",
172
+ "type": "uint8"
173
+ },
174
+ {
175
+ "internalType": "address",
176
+ "name": "depositor",
177
+ "type": "address"
178
+ },
179
+ {
180
+ "internalType": "bytes8",
181
+ "name": "blindingFactor",
182
+ "type": "bytes8"
183
+ },
184
+ {
185
+ "internalType": "bytes20",
186
+ "name": "walletPubKeyHash",
187
+ "type": "bytes20"
188
+ },
189
+ {
190
+ "internalType": "bytes20",
191
+ "name": "refundPubKeyHash",
192
+ "type": "bytes20"
193
+ },
194
+ {
195
+ "internalType": "bytes4",
196
+ "name": "refundLocktime",
197
+ "type": "bytes4"
198
+ },
199
+ {
200
+ "internalType": "address",
201
+ "name": "vault",
202
+ "type": "address"
203
+ }
204
+ ],
205
+ "internalType": "struct Bridge.RevealInfo",
206
+ "name": "reveal",
207
+ "type": "tuple"
208
+ }
209
+ ],
210
+ "name": "revealDeposit",
211
+ "outputs": [],
212
+ "stateMutability": "nonpayable",
213
+ "type": "function"
214
+ },
215
+ {
216
+ "inputs": [
111
217
  {
112
- "internalType": "bytes",
113
- "name": "txOutput",
114
- "type": "bytes"
218
+ "internalType": "address",
219
+ "name": "vault",
220
+ "type": "address"
115
221
  },
116
222
  {
117
- "internalType": "bytes4",
118
- "name": "txLocktime",
119
- "type": "bytes4"
223
+ "internalType": "bool",
224
+ "name": "isTrusted",
225
+ "type": "bool"
226
+ }
227
+ ],
228
+ "name": "setVaultStatus",
229
+ "outputs": [],
230
+ "stateMutability": "nonpayable",
231
+ "type": "function"
232
+ },
233
+ {
234
+ "inputs": [
235
+ {
236
+ "components": [
237
+ {
238
+ "internalType": "bytes4",
239
+ "name": "version",
240
+ "type": "bytes4"
241
+ },
242
+ {
243
+ "internalType": "bytes",
244
+ "name": "inputVector",
245
+ "type": "bytes"
246
+ },
247
+ {
248
+ "internalType": "bytes",
249
+ "name": "outputVector",
250
+ "type": "bytes"
251
+ },
252
+ {
253
+ "internalType": "bytes4",
254
+ "name": "locktime",
255
+ "type": "bytes4"
256
+ }
257
+ ],
258
+ "internalType": "struct BitcoinTx.Info",
259
+ "name": "sweepTx",
260
+ "type": "tuple"
120
261
  },
121
262
  {
122
263
  "internalType": "bytes",
@@ -139,6 +280,19 @@
139
280
  "stateMutability": "nonpayable",
140
281
  "type": "function"
141
282
  },
283
+ {
284
+ "inputs": [
285
+ {
286
+ "internalType": "address",
287
+ "name": "newOwner",
288
+ "type": "address"
289
+ }
290
+ ],
291
+ "name": "transferOwnership",
292
+ "outputs": [],
293
+ "stateMutability": "nonpayable",
294
+ "type": "function"
295
+ },
142
296
  {
143
297
  "inputs": [
144
298
  {
@@ -149,28 +303,33 @@
149
303
  ],
150
304
  "name": "unswept",
151
305
  "outputs": [
152
- {
153
- "internalType": "uint64",
154
- "name": "amount",
155
- "type": "uint64"
156
- },
157
306
  {
158
307
  "internalType": "address",
159
- "name": "vault",
308
+ "name": "depositor",
160
309
  "type": "address"
161
310
  },
311
+ {
312
+ "internalType": "bytes8",
313
+ "name": "amount",
314
+ "type": "bytes8"
315
+ },
162
316
  {
163
317
  "internalType": "uint32",
164
318
  "name": "revealedAt",
165
319
  "type": "uint32"
320
+ },
321
+ {
322
+ "internalType": "address",
323
+ "name": "vault",
324
+ "type": "address"
166
325
  }
167
326
  ],
168
327
  "stateMutability": "view",
169
328
  "type": "function"
170
329
  }
171
330
  ],
172
- "bytecode": "0x608060405234801561001057600080fd5b506109f0806100206000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80632c3e1d121461004657806342b1f1a41461006257806343c6de291461007e575b600080fd5b610060600480360381019061005b91906103df565b6100b0565b005b61007c60048036038101906100779190610486565b610238565b005b61009860048036038101906100939190610584565b610241565b6040516100a793929190610735565b60405180910390f35b60008787336040516020016100c793929190610657565b6040516020818303038152906040528051906020012060001c905060008060008381526020019081526020016000209050600081600001601c9054906101000a900463ffffffff1663ffffffff1614610155576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161014c9061068e565b60405180910390fd5b838160000160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550828160000160086101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055504281600001601c6101000a81548163ffffffff021916908363ffffffff1602179055507fed7e2a3180a53ccf8540bf67f1679359557837b4c2350f3c7f1d1409eaac3739828a8a338b8b8b8b8b604051610225999897969594939291906106ae565b60405180910390a1505050505050505050565b50505050505050565b60006020528060005260406000206000915090508060000160009054906101000a900467ffffffffffffffff16908060000160089054906101000a900473ffffffffffffffffffffffffffffffffffffffff169080600001601c9054906101000a900463ffffffff16905083565b60006102c26102bd84610791565b61076c565b9050828152602081018484840111156102da57600080fd5b6102e5848285610887565b509392505050565b6000813590506102fc81610930565b92915050565b60008135905061031181610947565b92915050565b6000813590506103268161095e565b92915050565b60008083601f84011261033e57600080fd5b8235905067ffffffffffffffff81111561035757600080fd5b60208301915083600182028301111561036f57600080fd5b9250929050565b600082601f83011261038757600080fd5b81356103978482602086016102af565b91505092915050565b6000813590506103af81610975565b92915050565b6000813590506103c48161098c565b92915050565b6000813590506103d9816109a3565b92915050565b600080600080600080600060c0888a0312156103fa57600080fd5b60006104088a828b01610302565b97505060206104198a828b016103ca565b965050604061042a8a828b016103b5565b955050606088013567ffffffffffffffff81111561044757600080fd5b6104538a828b0161032c565b945094505060806104668a828b016103b5565b92505060a06104778a828b016102ed565b91505092959891949750929550565b600080600080600080600060e0888a0312156104a157600080fd5b60006104af8a828b01610317565b975050602088013567ffffffffffffffff8111156104cc57600080fd5b6104d88a828b01610376565b965050604088013567ffffffffffffffff8111156104f557600080fd5b6105018a828b01610376565b95505060606105128a828b01610317565b945050608088013567ffffffffffffffff81111561052f57600080fd5b61053b8a828b01610376565b93505060a061054c8a828b016103a0565b92505060c088013567ffffffffffffffff81111561056957600080fd5b6105758a828b01610376565b91505092959891949750929550565b60006020828403121561059657600080fd5b60006105a4848285016103a0565b91505092915050565b6105b6816107e4565b82525050565b6105c5816107f6565b82525050565b60006105d783856107c2565b93506105e4838584610887565b6105ed836108f6565b840190509392505050565b60006106056018836107d3565b915061061082610907565b602082019050919050565b6106248161084c565b82525050565b61063381610856565b82525050565b61064281610866565b82525050565b6106518161087a565b82525050565b600060608201905061066c60008301866105bc565b6106796020830185610648565b61068660408301846105ad565b949350505050565b600060208201905081810360008301526106a7816105f8565b9050919050565b6000610100820190506106c4600083018c61061b565b6106d1602083018b6105bc565b6106de604083018a610648565b6106eb60608301896105ad565b6106f86080830188610639565b81810360a083015261070b8186886105cb565b905061071a60c0830185610639565b61072760e08301846105ad565b9a9950505050505050505050565b600060608201905061074a6000830186610639565b61075760208301856105ad565b610764604083018461062a565b949350505050565b6000610776610787565b90506107828282610896565b919050565b6000604051905090565b600067ffffffffffffffff8211156107ac576107ab6108c7565b5b6107b5826108f6565b9050602081019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006107ef8261082c565b9050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b600067ffffffffffffffff82169050919050565b600060ff82169050919050565b82818337600083830152505050565b61089f826108f6565b810181811067ffffffffffffffff821117156108be576108bd6108c7565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f4465706f73697420616c72656164792072657665616c65640000000000000000600082015250565b610939816107e4565b811461094457600080fd5b50565b610950816107f6565b811461095b57600080fd5b50565b61096781610800565b811461097257600080fd5b50565b61097e8161084c565b811461098957600080fd5b50565b61099581610866565b81146109a057600080fd5b50565b6109ac8161087a565b81146109b757600080fd5b5056fea26469706673582212207d1e61f37f8d0f4d2e819ea92984d0f23b9d069fd850451fb407141395ccff2864736f6c63430008040033",
173
- "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100415760003560e01c80632c3e1d121461004657806342b1f1a41461006257806343c6de291461007e575b600080fd5b610060600480360381019061005b91906103df565b6100b0565b005b61007c60048036038101906100779190610486565b610238565b005b61009860048036038101906100939190610584565b610241565b6040516100a793929190610735565b60405180910390f35b60008787336040516020016100c793929190610657565b6040516020818303038152906040528051906020012060001c905060008060008381526020019081526020016000209050600081600001601c9054906101000a900463ffffffff1663ffffffff1614610155576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161014c9061068e565b60405180910390fd5b838160000160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550828160000160086101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055504281600001601c6101000a81548163ffffffff021916908363ffffffff1602179055507fed7e2a3180a53ccf8540bf67f1679359557837b4c2350f3c7f1d1409eaac3739828a8a338b8b8b8b8b604051610225999897969594939291906106ae565b60405180910390a1505050505050505050565b50505050505050565b60006020528060005260406000206000915090508060000160009054906101000a900467ffffffffffffffff16908060000160089054906101000a900473ffffffffffffffffffffffffffffffffffffffff169080600001601c9054906101000a900463ffffffff16905083565b60006102c26102bd84610791565b61076c565b9050828152602081018484840111156102da57600080fd5b6102e5848285610887565b509392505050565b6000813590506102fc81610930565b92915050565b60008135905061031181610947565b92915050565b6000813590506103268161095e565b92915050565b60008083601f84011261033e57600080fd5b8235905067ffffffffffffffff81111561035757600080fd5b60208301915083600182028301111561036f57600080fd5b9250929050565b600082601f83011261038757600080fd5b81356103978482602086016102af565b91505092915050565b6000813590506103af81610975565b92915050565b6000813590506103c48161098c565b92915050565b6000813590506103d9816109a3565b92915050565b600080600080600080600060c0888a0312156103fa57600080fd5b60006104088a828b01610302565b97505060206104198a828b016103ca565b965050604061042a8a828b016103b5565b955050606088013567ffffffffffffffff81111561044757600080fd5b6104538a828b0161032c565b945094505060806104668a828b016103b5565b92505060a06104778a828b016102ed565b91505092959891949750929550565b600080600080600080600060e0888a0312156104a157600080fd5b60006104af8a828b01610317565b975050602088013567ffffffffffffffff8111156104cc57600080fd5b6104d88a828b01610376565b965050604088013567ffffffffffffffff8111156104f557600080fd5b6105018a828b01610376565b95505060606105128a828b01610317565b945050608088013567ffffffffffffffff81111561052f57600080fd5b61053b8a828b01610376565b93505060a061054c8a828b016103a0565b92505060c088013567ffffffffffffffff81111561056957600080fd5b6105758a828b01610376565b91505092959891949750929550565b60006020828403121561059657600080fd5b60006105a4848285016103a0565b91505092915050565b6105b6816107e4565b82525050565b6105c5816107f6565b82525050565b60006105d783856107c2565b93506105e4838584610887565b6105ed836108f6565b840190509392505050565b60006106056018836107d3565b915061061082610907565b602082019050919050565b6106248161084c565b82525050565b61063381610856565b82525050565b61064281610866565b82525050565b6106518161087a565b82525050565b600060608201905061066c60008301866105bc565b6106796020830185610648565b61068660408301846105ad565b949350505050565b600060208201905081810360008301526106a7816105f8565b9050919050565b6000610100820190506106c4600083018c61061b565b6106d1602083018b6105bc565b6106de604083018a610648565b6106eb60608301896105ad565b6106f86080830188610639565b81810360a083015261070b8186886105cb565b905061071a60c0830185610639565b61072760e08301846105ad565b9a9950505050505050505050565b600060608201905061074a6000830186610639565b61075760208301856105ad565b610764604083018461062a565b949350505050565b6000610776610787565b90506107828282610896565b919050565b6000604051905090565b600067ffffffffffffffff8211156107ac576107ab6108c7565b5b6107b5826108f6565b9050602081019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006107ef8261082c565b9050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b600067ffffffffffffffff82169050919050565b600060ff82169050919050565b82818337600083830152505050565b61089f826108f6565b810181811067ffffffffffffffff821117156108be576108bd6108c7565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f4465706f73697420616c72656164792072657665616c65640000000000000000600082015250565b610939816107e4565b811461094457600080fd5b50565b610950816107f6565b811461095b57600080fd5b50565b61096781610800565b811461097257600080fd5b50565b61097e8161084c565b811461098957600080fd5b50565b61099581610866565b81146109a057600080fd5b50565b6109ac8161087a565b81146109b757600080fd5b5056fea26469706673582212207d1e61f37f8d0f4d2e819ea92984d0f23b9d069fd850451fb407141395ccff2864736f6c63430008040033",
331
+ "bytecode": "0x60806040523480156200001157600080fd5b5062000032620000266200003860201b60201c565b6200004060201b60201c565b62000104565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6131a080620001146000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c80638d658d4e1161005b5780638d658d4e146101025780638da5cb5b1461011e578063e53c0b551461013c578063f2fde38b1461016c57610088565b806325750db71461008d57806343c6de29146100a957806360d712fc146100dc578063715018a6146100f8575b600080fd5b6100a760048036038101906100a29190611cae565b610188565b005b6100c360048036038101906100be9190611d03565b610772565b6040516100d3949392919061240e565b60405180910390f35b6100f660048036038101906100f19190611b23565b6107ff565b005b610100610924565b005b61011c60048036038101906101179190611c03565b6109ac565b005b6101266109b2565b60405161013391906123f3565b60405180910390f35b61015660048036038101906101519190611afa565b6109db565b6040516101639190612453565b60405180910390f35b61018660048036038101906101819190611afa565b6109fb565b005b600073ffffffffffffffffffffffffffffffffffffffff168160c00160208101906101b39190611afa565b73ffffffffffffffffffffffffffffffffffffffff1614806102305750600160008260c00160208101906101e79190611afa565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61026f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102669061254c565b60405180910390fd5b60008160200160208101906102849190611afa565b8260400160208101906102979190611bda565b8360600160208101906102aa9190611b5f565b8460800160208101906102bd9190611b5f565b8560a00160208101906102d09190611bb1565b6040516020016102e49594939291906122b8565b6040516020818303038152906040529050600061037183600001602081019061030d9190611d2c565b60ff16858060400190610320919061264c565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050610af390919063ffffffff16565b9050600061037e82610d33565b90506014815114156103e757610393836110d5565b805190602001208180519060200120146103e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103d9906125ec565b60405180910390fd5b610484565b602081511415610448576103fa836111a2565b61040382611268565b14610443576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161043a9061256c565b60405180910390fd5b610483565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161047a9061258c565b60405180910390fd5b5b60006104f886600001602081019061049c9190611bb1565b8780602001906104ac919061264c565b8980604001906104bc919061264c565b8b60600160208101906104cf9190611bb1565b6040516020016104e496959493929190612257565b6040516020818303038152906040526111a2565b9050600060026000838860000160208101906105149190611d2c565b60405160200161052592919061222b565b6040516020818303038152906040528051906020012060001c81526020019081526020016000209050600081600001601c9054906101000a900463ffffffff1663ffffffff16146105ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105a2906125cc565b60405180910390fd5b600060208501519050808260000160146101000a81548167ffffffffffffffff021916908360c01c02179055508660200160208101906105eb9190611afa565b8260000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055504282600001601c6101000a81548163ffffffff021916908363ffffffff1602179055508660c00160208101906106639190611afa565b8260010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f293519c6fe266b8b9ca154d153e408c6ef03135a5abeb42e9a91781d620ca47b838860000160208101906106da9190611d2c565b8960200160208101906106ed9190611afa565b8a60400160208101906107009190611bda565b8b60600160208101906107139190611b5f565b8c60800160208101906107269190611b5f565b8d60a00160208101906107399190611bb1565b8e60c001602081019061074c9190611afa565b60405161076098979695949392919061246e565b60405180910390a15050505050505050565b60026020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060000160149054906101000a900460c01b9080600001601c9054906101000a900463ffffffff16908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905084565b61080761128b565b73ffffffffffffffffffffffffffffffffffffffff166108256109b2565b73ffffffffffffffffffffffffffffffffffffffff161461087b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610872906125ac565b60405180910390fd5b80600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9065599c12c4294d9e2201638226d0d0beb95c228f468c4e7c2bdb8322b6066f826040516109189190612453565b60405180910390a25050565b61092c61128b565b73ffffffffffffffffffffffffffffffffffffffff1661094a6109b2565b73ffffffffffffffffffffffffffffffffffffffff16146109a0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610997906125ac565b60405180910390fd5b6109aa6000611293565b565b50505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60016020528060005260406000206000915054906101000a900460ff1681565b610a0361128b565b73ffffffffffffffffffffffffffffffffffffffff16610a216109b2565b73ffffffffffffffffffffffffffffffffffffffff1614610a77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6e906125ac565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610ae7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ade906124ec565b60405180910390fd5b610af081611293565b50565b6060600080610b0185611357565b80925081935050507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415610b6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b639061250c565b60405180910390fd5b808410610bae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba59061260c565b60405180910390fd5b6060600080846001610bc0919061272b565b905060005b87811015610c7f57610bee82838b51610bde9190612983565b8b6114539092919063ffffffff16565b9350610bf984611519565b92507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831415610c5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c559061252c565b60405180910390fd5b8282610c6a919061272b565b91508080610c7790612b51565b915050610bc5565b50610ca181828a51610c919190612983565b8a6114539092919063ffffffff16565b9250610cac83611519565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415610d11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d089061252c565b60405180910390fd5b610d2681838a6114539092919063ffffffff16565b9550505050505092915050565b6060600082600881518110610d71577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b60f81c90508251600982610d909190612781565b60ff1614610db057604051806020016040528060008152509150506110d0565b600083600981518110610dec577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b60f81c60ff161415610edf5760028160ff161015610e2757604051806020016040528060008152509150506110d0565b600083600a81518110610e63577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b60f81c60ff169050600282610e8391906129b7565b60ff1681141580610ea2575060208114158015610ea1575060148114155b5b15610ec05760405180602001604052806000815250925050506110d0565b610ed6600b82866114539092919063ffffffff16565b925050506110d0565b6000610ef860086003866115fd9092919063ffffffff16565b90507fe1683aec1a10d43657f3f2c82e683d8e19e8a3f320ce9d3bf22c6ca6ab4cbce6811415610ffc57601484600b81518110610f5e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b60f81c60ff16141580610fbe57507f3b50b2715f5a28d2a7eeb517f17ec797e8536bd425bf31fc4f6bf7ce1e34b77d610fbb60028651610fa99190612983565b6002876115fd9092919063ffffffff16565b14155b15610fdc5760405180602001604052806000815250925050506110d0565b610ff3600c6014866114539092919063ffffffff16565b925050506110d0565b7fa0916ee0b243ee20fb4ce56170744d86b54d7ae03a418a7a12156f40dedcf7d78114156110bb57608784600186516110359190612983565b8151811061106c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b60f81c60ff161461109b5760405180602001604052806000815250925050506110d0565b6110b2600b6014866114539092919063ffffffff16565b925050506110d0565b50604051806020016040528060008152509150505b919050565b606060036002836040516110e991906122a1565b602060405180830381855afa158015611106573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906111299190611b88565b6040516020016111399190612210565b60405160208183030381529060405260405161115591906122a1565b602060405180830381855afa158015611172573d6000803e3d6000fd5b5050506040515160601b60405160200161118c91906121f5565b6040516020818303038152906040529050919050565b6000600280836040516111b591906122a1565b602060405180830381855afa1580156111d2573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906111f59190611b88565b6040516020016112059190612210565b60405160208183030381529060405260405161122191906122a1565b602060405180830381855afa15801561123e573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906112619190611b88565b9050919050565b6000808251141561127e576000801b9050611286565b602082015190505b919050565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008060006113658461166f565b905060008160ff1614156113cd576000846000815181106113af577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b60f81c8060ff169050925092505061144e565b8060016113da9190612781565b60ff1684511015611412577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6000925092505061144e565b600061143d61143861143360018560ff16896114539092919063ffffffff16565b61178f565b6118f6565b905081818160ff1691509350935050505b915091565b6060600082141561147557604051806020016040528060008152509050611512565b60008284611483919061272b565b90508381118015611495575080855110155b6114d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114cb9061262c565b60405180910390fd5b604051915082604083010160405282825283850182038460208701018481015b8082101561150d578151838301526020820191506114f4565b505050505b9392505050565b600060098251101561154d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90506115f8565b600061157160088085516115619190612983565b856114539092919063ffffffff16565b905060008061157f83611357565b80925081935050507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156115da577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff93505050506115f8565b808260096115e8919061272b565b6115f2919061272b565b93505050505b919050565b600080828461160c919061272b565b9050838111801561161e575080855110155b61165d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116549061262c565b60405180910390fd5b82846020870101209150509392505050565b600060ff826000815181106116ad577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b60f81c60ff1614156116cd576008905061178a565b60fe82600081518110611709577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b60f81c60ff161415611729576004905061178a565b60fd82600081518110611765577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b60f81c60ff161415611785576002905061178a565b600090505b919050565b60606000825167ffffffffffffffff8111156117d4577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156118065781602001600182028036833780820191505090505b50905060005b83518110156118ec5783818151811061184e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b8260018387516118699190612983565b6118739190612983565b815181106118aa577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535080806118e490612b51565b91505061180c565b5080915050919050565b60008060005b83518110156119aa57600181611912919061272b565b845161191e9190612983565b600861192a9190612929565b6002611936919061280b565b84828151811061196f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b60f81c60ff1661198a9190612929565b82611995919061272b565b915080806119a290612b51565b9150506118fc565b5080915050919050565b60006119c76119c2846126c8565b6126a3565b9050828152602081018484840111156119df57600080fd5b6119ea848285612ade565b509392505050565b600081359050611a01816130b2565b92915050565b600081359050611a16816130c9565b92915050565b600081359050611a2b816130e0565b92915050565b600081519050611a40816130f7565b92915050565b600081359050611a558161310e565b92915050565b600081359050611a6a81613125565b92915050565b600082601f830112611a8157600080fd5b8135611a918482602086016119b4565b91505092915050565b600060808284031215611aac57600080fd5b81905092915050565b600060e08284031215611ac757600080fd5b81905092915050565b600081359050611adf8161313c565b92915050565b600081359050611af481613153565b92915050565b600060208284031215611b0c57600080fd5b6000611b1a848285016119f2565b91505092915050565b60008060408385031215611b3657600080fd5b6000611b44858286016119f2565b9250506020611b5585828601611a07565b9150509250929050565b600060208284031215611b7157600080fd5b6000611b7f84828501611a1c565b91505092915050565b600060208284031215611b9a57600080fd5b6000611ba884828501611a31565b91505092915050565b600060208284031215611bc357600080fd5b6000611bd184828501611a46565b91505092915050565b600060208284031215611bec57600080fd5b6000611bfa84828501611a5b565b91505092915050565b60008060008060808587031215611c1957600080fd5b600085013567ffffffffffffffff811115611c3357600080fd5b611c3f87828801611a9a565b945050602085013567ffffffffffffffff811115611c5c57600080fd5b611c6887828801611a70565b9350506040611c7987828801611ad0565b925050606085013567ffffffffffffffff811115611c9657600080fd5b611ca287828801611a70565b91505092959194509250565b6000806101008385031215611cc257600080fd5b600083013567ffffffffffffffff811115611cdc57600080fd5b611ce885828601611a9a565b9250506020611cf985828601611ab5565b9150509250929050565b600060208284031215611d1557600080fd5b6000611d2384828501611ad0565b91505092915050565b600060208284031215611d3e57600080fd5b6000611d4c84828501611ae5565b91505092915050565b611d5e816129eb565b82525050565b611d75611d70826129eb565b612b9a565b82525050565b611d84816129fd565b82525050565b611d9381612a09565b82525050565b611daa611da582612a09565b612bac565b82525050565b611db981612a35565b82525050565b611dd0611dcb82612a35565b612bb6565b82525050565b611ddf81612a3f565b82525050565b611df6611df182612a3f565b612bc0565b82525050565b611e0581612a6b565b82525050565b611e1c611e1782612a6b565b612bca565b82525050565b6000611e2e8385612704565b9350611e3b838584612ade565b82840190509392505050565b6000611e52826126f9565b611e5c8185612704565b9350611e6c818560208601612aed565b80840191505092915050565b6000611e85600183612720565b9150611e9082612c8e565b600182019050919050565b6000611ea8600183612720565b9150611eb382612cb7565b600182019050919050565b6000611ecb60268361270f565b9150611ed682612ce0565b604082019050919050565b6000611eee600183612720565b9150611ef982612d2f565b600182019050919050565b6000611f11600183612720565b9150611f1c82612d58565b600182019050919050565b6000611f3460228361270f565b9150611f3f82612d81565b604082019050919050565b6000611f57601a8361270f565b9150611f6282612dd0565b602082019050919050565b6000611f7a600183612720565b9150611f8582612df9565b600182019050919050565b6000611f9d60148361270f565b9150611fa882612e22565b602082019050919050565b6000611fc0600183612720565b9150611fcb82612e4b565b600182019050919050565b6000611fe3600183612720565b9150611fee82612e74565b600182019050919050565b600061200660198361270f565b915061201182612e9d565b602082019050919050565b600061202960188361270f565b915061203482612ec6565b602082019050919050565b600061204c600183612720565b915061205782612eef565b600182019050919050565b600061206f60208361270f565b915061207a82612f18565b602082019050919050565b6000612092600183612720565b915061209d82612f41565b600182019050919050565b60006120b5600183612720565b91506120c082612f6a565b600182019050919050565b60006120d860188361270f565b91506120e382612f93565b602082019050919050565b60006120fb60198361270f565b915061210682612fbc565b602082019050919050565b600061211e600183612720565b915061212982612fe5565b600182019050919050565b600061214160118361270f565b915061214c8261300e565b602082019050919050565b600061216460138361270f565b915061216f82613037565b602082019050919050565b6000612187600183612720565b915061219282613060565b600182019050919050565b60006121aa600183612720565b91506121b582613089565b600182019050919050565b6121c981612ac1565b82525050565b6121d881612ad1565b82525050565b6121ef6121ea82612ad1565b612be6565b82525050565b60006122018284611d99565b60148201915081905092915050565b600061221c8284611dbf565b60208201915081905092915050565b60006122378285611dbf565b60208201915061224782846121de565b6001820191508190509392505050565b60006122638289611de5565b600482019150612274828789611e22565b9150612281828587611e22565b915061228d8284611de5565b600482019150819050979650505050505050565b60006122ad8284611e47565b915081905092915050565b60006122c382611f6d565b91506122cf8288611d64565b6014820191506122de82611f04565b91506122e982612111565b91506122f58287611e0b565b60088201915061230482611f04565b915061230f82612085565b915061231a82611fb3565b915061232582611f6d565b91506123318286611d99565b6014820191506123408261203f565b915061234b82611e78565b91506123568261219d565b915061236182611e9b565b915061236c82612085565b915061237782611fb3565b915061238282611f6d565b915061238e8285611d99565b60148201915061239d82611ee1565b91506123a88261217a565b91506123b48284611de5565b6004820191506123c382611fd6565b91506123ce82611f04565b91506123d98261219d565b91506123e4826120a8565b91508190509695505050505050565b60006020820190506124086000830184611d55565b92915050565b60006080820190506124236000830187611d55565b6124306020830186611dfc565b61243d60408301856121c0565b61244a6060830184611d55565b95945050505050565b60006020820190506124686000830184611d7b565b92915050565b600061010082019050612484600083018b611db0565b612491602083018a6121cf565b61249e6040830189611d55565b6124ab6060830188611dfc565b6124b86080830187611d8a565b6124c560a0830186611d8a565b6124d260c0830185611dd6565b6124df60e0830184611d55565b9998505050505050505050565b6000602082019050818103600083015261250581611ebe565b9050919050565b6000602082019050818103600083015261252581611f27565b9050919050565b6000602082019050818103600083015261254581611f4a565b9050919050565b6000602082019050818103600083015261256581611f90565b9050919050565b6000602082019050818103600083015261258581611ff9565b9050919050565b600060208201905081810360008301526125a58161201c565b9050919050565b600060208201905081810360008301526125c581612062565b9050919050565b600060208201905081810360008301526125e5816120cb565b9050919050565b60006020820190508181036000830152612605816120ee565b9050919050565b6000602082019050818103600083015261262581612134565b9050919050565b6000602082019050818103600083015261264581612157565b9050919050565b6000808335600160200384360303811261266557600080fd5b80840192508235915067ffffffffffffffff82111561268357600080fd5b60208301925060018202360383131561269b57600080fd5b509250929050565b60006126ad6126be565b90506126b98282612b20565b919050565b6000604051905090565b600067ffffffffffffffff8211156126e3576126e2612c27565b5b6126ec82612c56565b9050602081019050919050565b600081519050919050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061273682612ab7565b915061274183612ab7565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561277657612775612bf8565b5b828201905092915050565b600061278c82612ad1565b915061279783612ad1565b92508260ff038211156127ad576127ac612bf8565b5b828201905092915050565b6000808291508390505b6001851115612802578086048111156127de576127dd612bf8565b5b60018516156127ed5780820291505b80810290506127fb85612c81565b94506127c2565b94509492505050565b600061281682612ab7565b915061282183612ab7565b925061284e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484612856565b905092915050565b6000826128665760019050612922565b816128745760009050612922565b816001811461288a5760028114612894576128c3565b6001915050612922565b60ff8411156128a6576128a5612bf8565b5b8360020a9150848211156128bd576128bc612bf8565b5b50612922565b5060208310610133831016604e8410600b84101617156128f85782820a9050838111156128f3576128f2612bf8565b5b612922565b61290584848460016127b8565b9250905081840481111561291c5761291b612bf8565b5b81810290505b9392505050565b600061293482612ab7565b915061293f83612ab7565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561297857612977612bf8565b5b828202905092915050565b600061298e82612ab7565b915061299983612ab7565b9250828210156129ac576129ab612bf8565b5b828203905092915050565b60006129c282612ad1565b91506129cd83612ad1565b9250828210156129e0576129df612bf8565b5b828203905092915050565b60006129f682612a97565b9050919050565b60008115159050919050565b60007fffffffffffffffffffffffffffffffffffffffff00000000000000000000000082169050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60007fffffffffffffffff00000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b83811015612b0b578082015181840152602081019050612af0565b83811115612b1a576000848401525b50505050565b612b2982612c56565b810181811067ffffffffffffffff82111715612b4857612b47612c27565b5b80604052505050565b6000612b5c82612ab7565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612b8f57612b8e612bf8565b5b600182019050919050565b6000612ba582612bd4565b9050919050565b6000819050919050565b6000819050919050565b6000819050919050565b6000819050919050565b6000612bdf82612c74565b9050919050565b6000612bf182612c67565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160f81b9050919050565b60008160601b9050919050565b60008160011c9050919050565b7f6300000000000000000000000000000000000000000000000000000000000000600082015250565b7f6700000000000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f8800000000000000000000000000000000000000000000000000000000000000600082015250565b7f7500000000000000000000000000000000000000000000000000000000000000600082015250565b7f52656164206f76657272756e20647572696e6720566172496e7420706172736960008201527f6e67000000000000000000000000000000000000000000000000000000000000602082015250565b7f42616420566172496e7420696e207363726970745075626b6579000000000000600082015250565b7f1400000000000000000000000000000000000000000000000000000000000000600082015250565b7f5661756c74206973206e6f742074727573746564000000000000000000000000600082015250565b7fa900000000000000000000000000000000000000000000000000000000000000600082015250565b7fb100000000000000000000000000000000000000000000000000000000000000600082015250565b7f57726f6e672033322d6279746520736372697074206861736800000000000000600082015250565b7f57726f6e67207363726970742068617368206c656e6774680000000000000000600082015250565b7f8700000000000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f7600000000000000000000000000000000000000000000000000000000000000600082015250565b7f6800000000000000000000000000000000000000000000000000000000000000600082015250565b7f4465706f73697420616c72656164792072657665616c65640000000000000000600082015250565b7f57726f6e672032302d6279746520736372697074206861736800000000000000600082015250565b7f0800000000000000000000000000000000000000000000000000000000000000600082015250565b7f566f75742072656164206f76657272756e000000000000000000000000000000600082015250565b7f536c696365206f7574206f6620626f756e647300000000000000000000000000600082015250565b7f0400000000000000000000000000000000000000000000000000000000000000600082015250565b7fac00000000000000000000000000000000000000000000000000000000000000600082015250565b6130bb816129eb565b81146130c657600080fd5b50565b6130d2816129fd565b81146130dd57600080fd5b50565b6130e981612a09565b81146130f457600080fd5b50565b61310081612a35565b811461310b57600080fd5b50565b61311781612a3f565b811461312257600080fd5b50565b61312e81612a6b565b811461313957600080fd5b50565b61314581612ab7565b811461315057600080fd5b50565b61315c81612ad1565b811461316757600080fd5b5056fea2646970667358221220295f3b4ea195fd7fba9f5296085182facf835e59f603d9d4791d500bcbfc014564736f6c63430008040033",
332
+ "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100885760003560e01c80638d658d4e1161005b5780638d658d4e146101025780638da5cb5b1461011e578063e53c0b551461013c578063f2fde38b1461016c57610088565b806325750db71461008d57806343c6de29146100a957806360d712fc146100dc578063715018a6146100f8575b600080fd5b6100a760048036038101906100a29190611cae565b610188565b005b6100c360048036038101906100be9190611d03565b610772565b6040516100d3949392919061240e565b60405180910390f35b6100f660048036038101906100f19190611b23565b6107ff565b005b610100610924565b005b61011c60048036038101906101179190611c03565b6109ac565b005b6101266109b2565b60405161013391906123f3565b60405180910390f35b61015660048036038101906101519190611afa565b6109db565b6040516101639190612453565b60405180910390f35b61018660048036038101906101819190611afa565b6109fb565b005b600073ffffffffffffffffffffffffffffffffffffffff168160c00160208101906101b39190611afa565b73ffffffffffffffffffffffffffffffffffffffff1614806102305750600160008260c00160208101906101e79190611afa565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61026f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102669061254c565b60405180910390fd5b60008160200160208101906102849190611afa565b8260400160208101906102979190611bda565b8360600160208101906102aa9190611b5f565b8460800160208101906102bd9190611b5f565b8560a00160208101906102d09190611bb1565b6040516020016102e49594939291906122b8565b6040516020818303038152906040529050600061037183600001602081019061030d9190611d2c565b60ff16858060400190610320919061264c565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050610af390919063ffffffff16565b9050600061037e82610d33565b90506014815114156103e757610393836110d5565b805190602001208180519060200120146103e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103d9906125ec565b60405180910390fd5b610484565b602081511415610448576103fa836111a2565b61040382611268565b14610443576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161043a9061256c565b60405180910390fd5b610483565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161047a9061258c565b60405180910390fd5b5b60006104f886600001602081019061049c9190611bb1565b8780602001906104ac919061264c565b8980604001906104bc919061264c565b8b60600160208101906104cf9190611bb1565b6040516020016104e496959493929190612257565b6040516020818303038152906040526111a2565b9050600060026000838860000160208101906105149190611d2c565b60405160200161052592919061222b565b6040516020818303038152906040528051906020012060001c81526020019081526020016000209050600081600001601c9054906101000a900463ffffffff1663ffffffff16146105ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105a2906125cc565b60405180910390fd5b600060208501519050808260000160146101000a81548167ffffffffffffffff021916908360c01c02179055508660200160208101906105eb9190611afa565b8260000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055504282600001601c6101000a81548163ffffffff021916908363ffffffff1602179055508660c00160208101906106639190611afa565b8260010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f293519c6fe266b8b9ca154d153e408c6ef03135a5abeb42e9a91781d620ca47b838860000160208101906106da9190611d2c565b8960200160208101906106ed9190611afa565b8a60400160208101906107009190611bda565b8b60600160208101906107139190611b5f565b8c60800160208101906107269190611b5f565b8d60a00160208101906107399190611bb1565b8e60c001602081019061074c9190611afa565b60405161076098979695949392919061246e565b60405180910390a15050505050505050565b60026020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060000160149054906101000a900460c01b9080600001601c9054906101000a900463ffffffff16908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905084565b61080761128b565b73ffffffffffffffffffffffffffffffffffffffff166108256109b2565b73ffffffffffffffffffffffffffffffffffffffff161461087b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610872906125ac565b60405180910390fd5b80600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9065599c12c4294d9e2201638226d0d0beb95c228f468c4e7c2bdb8322b6066f826040516109189190612453565b60405180910390a25050565b61092c61128b565b73ffffffffffffffffffffffffffffffffffffffff1661094a6109b2565b73ffffffffffffffffffffffffffffffffffffffff16146109a0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610997906125ac565b60405180910390fd5b6109aa6000611293565b565b50505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60016020528060005260406000206000915054906101000a900460ff1681565b610a0361128b565b73ffffffffffffffffffffffffffffffffffffffff16610a216109b2565b73ffffffffffffffffffffffffffffffffffffffff1614610a77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6e906125ac565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610ae7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ade906124ec565b60405180910390fd5b610af081611293565b50565b6060600080610b0185611357565b80925081935050507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415610b6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b639061250c565b60405180910390fd5b808410610bae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba59061260c565b60405180910390fd5b6060600080846001610bc0919061272b565b905060005b87811015610c7f57610bee82838b51610bde9190612983565b8b6114539092919063ffffffff16565b9350610bf984611519565b92507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831415610c5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c559061252c565b60405180910390fd5b8282610c6a919061272b565b91508080610c7790612b51565b915050610bc5565b50610ca181828a51610c919190612983565b8a6114539092919063ffffffff16565b9250610cac83611519565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415610d11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d089061252c565b60405180910390fd5b610d2681838a6114539092919063ffffffff16565b9550505050505092915050565b6060600082600881518110610d71577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b60f81c90508251600982610d909190612781565b60ff1614610db057604051806020016040528060008152509150506110d0565b600083600981518110610dec577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b60f81c60ff161415610edf5760028160ff161015610e2757604051806020016040528060008152509150506110d0565b600083600a81518110610e63577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b60f81c60ff169050600282610e8391906129b7565b60ff1681141580610ea2575060208114158015610ea1575060148114155b5b15610ec05760405180602001604052806000815250925050506110d0565b610ed6600b82866114539092919063ffffffff16565b925050506110d0565b6000610ef860086003866115fd9092919063ffffffff16565b90507fe1683aec1a10d43657f3f2c82e683d8e19e8a3f320ce9d3bf22c6ca6ab4cbce6811415610ffc57601484600b81518110610f5e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b60f81c60ff16141580610fbe57507f3b50b2715f5a28d2a7eeb517f17ec797e8536bd425bf31fc4f6bf7ce1e34b77d610fbb60028651610fa99190612983565b6002876115fd9092919063ffffffff16565b14155b15610fdc5760405180602001604052806000815250925050506110d0565b610ff3600c6014866114539092919063ffffffff16565b925050506110d0565b7fa0916ee0b243ee20fb4ce56170744d86b54d7ae03a418a7a12156f40dedcf7d78114156110bb57608784600186516110359190612983565b8151811061106c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b60f81c60ff161461109b5760405180602001604052806000815250925050506110d0565b6110b2600b6014866114539092919063ffffffff16565b925050506110d0565b50604051806020016040528060008152509150505b919050565b606060036002836040516110e991906122a1565b602060405180830381855afa158015611106573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906111299190611b88565b6040516020016111399190612210565b60405160208183030381529060405260405161115591906122a1565b602060405180830381855afa158015611172573d6000803e3d6000fd5b5050506040515160601b60405160200161118c91906121f5565b6040516020818303038152906040529050919050565b6000600280836040516111b591906122a1565b602060405180830381855afa1580156111d2573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906111f59190611b88565b6040516020016112059190612210565b60405160208183030381529060405260405161122191906122a1565b602060405180830381855afa15801561123e573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906112619190611b88565b9050919050565b6000808251141561127e576000801b9050611286565b602082015190505b919050565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008060006113658461166f565b905060008160ff1614156113cd576000846000815181106113af577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b60f81c8060ff169050925092505061144e565b8060016113da9190612781565b60ff1684511015611412577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6000925092505061144e565b600061143d61143861143360018560ff16896114539092919063ffffffff16565b61178f565b6118f6565b905081818160ff1691509350935050505b915091565b6060600082141561147557604051806020016040528060008152509050611512565b60008284611483919061272b565b90508381118015611495575080855110155b6114d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114cb9061262c565b60405180910390fd5b604051915082604083010160405282825283850182038460208701018481015b8082101561150d578151838301526020820191506114f4565b505050505b9392505050565b600060098251101561154d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90506115f8565b600061157160088085516115619190612983565b856114539092919063ffffffff16565b905060008061157f83611357565b80925081935050507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156115da577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff93505050506115f8565b808260096115e8919061272b565b6115f2919061272b565b93505050505b919050565b600080828461160c919061272b565b9050838111801561161e575080855110155b61165d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116549061262c565b60405180910390fd5b82846020870101209150509392505050565b600060ff826000815181106116ad577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b60f81c60ff1614156116cd576008905061178a565b60fe82600081518110611709577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b60f81c60ff161415611729576004905061178a565b60fd82600081518110611765577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b60f81c60ff161415611785576002905061178a565b600090505b919050565b60606000825167ffffffffffffffff8111156117d4577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156118065781602001600182028036833780820191505090505b50905060005b83518110156118ec5783818151811061184e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b8260018387516118699190612983565b6118739190612983565b815181106118aa577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535080806118e490612b51565b91505061180c565b5080915050919050565b60008060005b83518110156119aa57600181611912919061272b565b845161191e9190612983565b600861192a9190612929565b6002611936919061280b565b84828151811061196f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b60f81c60ff1661198a9190612929565b82611995919061272b565b915080806119a290612b51565b9150506118fc565b5080915050919050565b60006119c76119c2846126c8565b6126a3565b9050828152602081018484840111156119df57600080fd5b6119ea848285612ade565b509392505050565b600081359050611a01816130b2565b92915050565b600081359050611a16816130c9565b92915050565b600081359050611a2b816130e0565b92915050565b600081519050611a40816130f7565b92915050565b600081359050611a558161310e565b92915050565b600081359050611a6a81613125565b92915050565b600082601f830112611a8157600080fd5b8135611a918482602086016119b4565b91505092915050565b600060808284031215611aac57600080fd5b81905092915050565b600060e08284031215611ac757600080fd5b81905092915050565b600081359050611adf8161313c565b92915050565b600081359050611af481613153565b92915050565b600060208284031215611b0c57600080fd5b6000611b1a848285016119f2565b91505092915050565b60008060408385031215611b3657600080fd5b6000611b44858286016119f2565b9250506020611b5585828601611a07565b9150509250929050565b600060208284031215611b7157600080fd5b6000611b7f84828501611a1c565b91505092915050565b600060208284031215611b9a57600080fd5b6000611ba884828501611a31565b91505092915050565b600060208284031215611bc357600080fd5b6000611bd184828501611a46565b91505092915050565b600060208284031215611bec57600080fd5b6000611bfa84828501611a5b565b91505092915050565b60008060008060808587031215611c1957600080fd5b600085013567ffffffffffffffff811115611c3357600080fd5b611c3f87828801611a9a565b945050602085013567ffffffffffffffff811115611c5c57600080fd5b611c6887828801611a70565b9350506040611c7987828801611ad0565b925050606085013567ffffffffffffffff811115611c9657600080fd5b611ca287828801611a70565b91505092959194509250565b6000806101008385031215611cc257600080fd5b600083013567ffffffffffffffff811115611cdc57600080fd5b611ce885828601611a9a565b9250506020611cf985828601611ab5565b9150509250929050565b600060208284031215611d1557600080fd5b6000611d2384828501611ad0565b91505092915050565b600060208284031215611d3e57600080fd5b6000611d4c84828501611ae5565b91505092915050565b611d5e816129eb565b82525050565b611d75611d70826129eb565b612b9a565b82525050565b611d84816129fd565b82525050565b611d9381612a09565b82525050565b611daa611da582612a09565b612bac565b82525050565b611db981612a35565b82525050565b611dd0611dcb82612a35565b612bb6565b82525050565b611ddf81612a3f565b82525050565b611df6611df182612a3f565b612bc0565b82525050565b611e0581612a6b565b82525050565b611e1c611e1782612a6b565b612bca565b82525050565b6000611e2e8385612704565b9350611e3b838584612ade565b82840190509392505050565b6000611e52826126f9565b611e5c8185612704565b9350611e6c818560208601612aed565b80840191505092915050565b6000611e85600183612720565b9150611e9082612c8e565b600182019050919050565b6000611ea8600183612720565b9150611eb382612cb7565b600182019050919050565b6000611ecb60268361270f565b9150611ed682612ce0565b604082019050919050565b6000611eee600183612720565b9150611ef982612d2f565b600182019050919050565b6000611f11600183612720565b9150611f1c82612d58565b600182019050919050565b6000611f3460228361270f565b9150611f3f82612d81565b604082019050919050565b6000611f57601a8361270f565b9150611f6282612dd0565b602082019050919050565b6000611f7a600183612720565b9150611f8582612df9565b600182019050919050565b6000611f9d60148361270f565b9150611fa882612e22565b602082019050919050565b6000611fc0600183612720565b9150611fcb82612e4b565b600182019050919050565b6000611fe3600183612720565b9150611fee82612e74565b600182019050919050565b600061200660198361270f565b915061201182612e9d565b602082019050919050565b600061202960188361270f565b915061203482612ec6565b602082019050919050565b600061204c600183612720565b915061205782612eef565b600182019050919050565b600061206f60208361270f565b915061207a82612f18565b602082019050919050565b6000612092600183612720565b915061209d82612f41565b600182019050919050565b60006120b5600183612720565b91506120c082612f6a565b600182019050919050565b60006120d860188361270f565b91506120e382612f93565b602082019050919050565b60006120fb60198361270f565b915061210682612fbc565b602082019050919050565b600061211e600183612720565b915061212982612fe5565b600182019050919050565b600061214160118361270f565b915061214c8261300e565b602082019050919050565b600061216460138361270f565b915061216f82613037565b602082019050919050565b6000612187600183612720565b915061219282613060565b600182019050919050565b60006121aa600183612720565b91506121b582613089565b600182019050919050565b6121c981612ac1565b82525050565b6121d881612ad1565b82525050565b6121ef6121ea82612ad1565b612be6565b82525050565b60006122018284611d99565b60148201915081905092915050565b600061221c8284611dbf565b60208201915081905092915050565b60006122378285611dbf565b60208201915061224782846121de565b6001820191508190509392505050565b60006122638289611de5565b600482019150612274828789611e22565b9150612281828587611e22565b915061228d8284611de5565b600482019150819050979650505050505050565b60006122ad8284611e47565b915081905092915050565b60006122c382611f6d565b91506122cf8288611d64565b6014820191506122de82611f04565b91506122e982612111565b91506122f58287611e0b565b60088201915061230482611f04565b915061230f82612085565b915061231a82611fb3565b915061232582611f6d565b91506123318286611d99565b6014820191506123408261203f565b915061234b82611e78565b91506123568261219d565b915061236182611e9b565b915061236c82612085565b915061237782611fb3565b915061238282611f6d565b915061238e8285611d99565b60148201915061239d82611ee1565b91506123a88261217a565b91506123b48284611de5565b6004820191506123c382611fd6565b91506123ce82611f04565b91506123d98261219d565b91506123e4826120a8565b91508190509695505050505050565b60006020820190506124086000830184611d55565b92915050565b60006080820190506124236000830187611d55565b6124306020830186611dfc565b61243d60408301856121c0565b61244a6060830184611d55565b95945050505050565b60006020820190506124686000830184611d7b565b92915050565b600061010082019050612484600083018b611db0565b612491602083018a6121cf565b61249e6040830189611d55565b6124ab6060830188611dfc565b6124b86080830187611d8a565b6124c560a0830186611d8a565b6124d260c0830185611dd6565b6124df60e0830184611d55565b9998505050505050505050565b6000602082019050818103600083015261250581611ebe565b9050919050565b6000602082019050818103600083015261252581611f27565b9050919050565b6000602082019050818103600083015261254581611f4a565b9050919050565b6000602082019050818103600083015261256581611f90565b9050919050565b6000602082019050818103600083015261258581611ff9565b9050919050565b600060208201905081810360008301526125a58161201c565b9050919050565b600060208201905081810360008301526125c581612062565b9050919050565b600060208201905081810360008301526125e5816120cb565b9050919050565b60006020820190508181036000830152612605816120ee565b9050919050565b6000602082019050818103600083015261262581612134565b9050919050565b6000602082019050818103600083015261264581612157565b9050919050565b6000808335600160200384360303811261266557600080fd5b80840192508235915067ffffffffffffffff82111561268357600080fd5b60208301925060018202360383131561269b57600080fd5b509250929050565b60006126ad6126be565b90506126b98282612b20565b919050565b6000604051905090565b600067ffffffffffffffff8211156126e3576126e2612c27565b5b6126ec82612c56565b9050602081019050919050565b600081519050919050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061273682612ab7565b915061274183612ab7565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561277657612775612bf8565b5b828201905092915050565b600061278c82612ad1565b915061279783612ad1565b92508260ff038211156127ad576127ac612bf8565b5b828201905092915050565b6000808291508390505b6001851115612802578086048111156127de576127dd612bf8565b5b60018516156127ed5780820291505b80810290506127fb85612c81565b94506127c2565b94509492505050565b600061281682612ab7565b915061282183612ab7565b925061284e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484612856565b905092915050565b6000826128665760019050612922565b816128745760009050612922565b816001811461288a5760028114612894576128c3565b6001915050612922565b60ff8411156128a6576128a5612bf8565b5b8360020a9150848211156128bd576128bc612bf8565b5b50612922565b5060208310610133831016604e8410600b84101617156128f85782820a9050838111156128f3576128f2612bf8565b5b612922565b61290584848460016127b8565b9250905081840481111561291c5761291b612bf8565b5b81810290505b9392505050565b600061293482612ab7565b915061293f83612ab7565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561297857612977612bf8565b5b828202905092915050565b600061298e82612ab7565b915061299983612ab7565b9250828210156129ac576129ab612bf8565b5b828203905092915050565b60006129c282612ad1565b91506129cd83612ad1565b9250828210156129e0576129df612bf8565b5b828203905092915050565b60006129f682612a97565b9050919050565b60008115159050919050565b60007fffffffffffffffffffffffffffffffffffffffff00000000000000000000000082169050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60007fffffffffffffffff00000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b83811015612b0b578082015181840152602081019050612af0565b83811115612b1a576000848401525b50505050565b612b2982612c56565b810181811067ffffffffffffffff82111715612b4857612b47612c27565b5b80604052505050565b6000612b5c82612ab7565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612b8f57612b8e612bf8565b5b600182019050919050565b6000612ba582612bd4565b9050919050565b6000819050919050565b6000819050919050565b6000819050919050565b6000819050919050565b6000612bdf82612c74565b9050919050565b6000612bf182612c67565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160f81b9050919050565b60008160601b9050919050565b60008160011c9050919050565b7f6300000000000000000000000000000000000000000000000000000000000000600082015250565b7f6700000000000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f8800000000000000000000000000000000000000000000000000000000000000600082015250565b7f7500000000000000000000000000000000000000000000000000000000000000600082015250565b7f52656164206f76657272756e20647572696e6720566172496e7420706172736960008201527f6e67000000000000000000000000000000000000000000000000000000000000602082015250565b7f42616420566172496e7420696e207363726970745075626b6579000000000000600082015250565b7f1400000000000000000000000000000000000000000000000000000000000000600082015250565b7f5661756c74206973206e6f742074727573746564000000000000000000000000600082015250565b7fa900000000000000000000000000000000000000000000000000000000000000600082015250565b7fb100000000000000000000000000000000000000000000000000000000000000600082015250565b7f57726f6e672033322d6279746520736372697074206861736800000000000000600082015250565b7f57726f6e67207363726970742068617368206c656e6774680000000000000000600082015250565b7f8700000000000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f7600000000000000000000000000000000000000000000000000000000000000600082015250565b7f6800000000000000000000000000000000000000000000000000000000000000600082015250565b7f4465706f73697420616c72656164792072657665616c65640000000000000000600082015250565b7f57726f6e672032302d6279746520736372697074206861736800000000000000600082015250565b7f0800000000000000000000000000000000000000000000000000000000000000600082015250565b7f566f75742072656164206f76657272756e000000000000000000000000000000600082015250565b7f536c696365206f7574206f6620626f756e647300000000000000000000000000600082015250565b7f0400000000000000000000000000000000000000000000000000000000000000600082015250565b7fac00000000000000000000000000000000000000000000000000000000000000600082015250565b6130bb816129eb565b81146130c657600080fd5b50565b6130d2816129fd565b81146130dd57600080fd5b50565b6130e981612a09565b81146130f457600080fd5b50565b61310081612a35565b811461310b57600080fd5b50565b61311781612a3f565b811461312257600080fd5b50565b61312e81612a6b565b811461313957600080fd5b50565b61314581612ab7565b811461315057600080fd5b50565b61315c81612ad1565b811461316757600080fd5b5056fea2646970667358221220295f3b4ea195fd7fba9f5296085182facf835e59f603d9d4791d500bcbfc014564736f6c63430008040033",
174
333
  "linkReferences": {},
175
334
  "deployedLinkReferences": {}
176
335
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/d7c0f74571a35135607fe09dad43e5dd.json"
3
+ "buildInfo": "../../../build-info/6fd49a5e373c5d7782165e5d5363063e.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/d7c0f74571a35135607fe09dad43e5dd.json"
3
+ "buildInfo": "../../../build-info/6fd49a5e373c5d7782165e5d5363063e.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/d7c0f74571a35135607fe09dad43e5dd.json"
3
+ "buildInfo": "../../../build-info/6fd49a5e373c5d7782165e5d5363063e.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/d7c0f74571a35135607fe09dad43e5dd.json"
3
+ "buildInfo": "../../../build-info/6fd49a5e373c5d7782165e5d5363063e.json"
4
4
  }
@@ -0,0 +1,104 @@
1
+ // SPDX-License-Identifier: MIT
2
+
3
+ // ██████████████ ▐████▌ ██████████████
4
+ // ██████████████ ▐████▌ ██████████████
5
+ // ▐████▌ ▐████▌
6
+ // ▐████▌ ▐████▌
7
+ // ██████████████ ▐████▌ ██████████████
8
+ // ██████████████ ▐████▌ ██████████████
9
+ // ▐████▌ ▐████▌
10
+ // ▐████▌ ▐████▌
11
+ // ▐████▌ ▐████▌
12
+ // ▐████▌ ▐████▌
13
+ // ▐████▌ ▐████▌
14
+ // ▐████▌ ▐████▌
15
+
16
+ pragma solidity 0.8.4;
17
+
18
+ /// @title Bitcoin transaction
19
+ /// @notice Allows to reference Bitcoin raw transaction in Solidity.
20
+ /// @dev See https://developer.bitcoin.org/reference/transactions.html#raw-transaction-format
21
+ ///
22
+ /// Raw Bitcon transaction data:
23
+ ///
24
+ /// | Bytes | Name | BTC type | Description |
25
+ /// |--------|--------------|------------------------|---------------------------|
26
+ /// | 4 | version | int32_t (LE) | TX version number |
27
+ /// | varies | tx_in_count | compactSize uint (LE) | Number of TX inputs |
28
+ /// | varies | tx_in | txIn[] | TX inputs |
29
+ /// | varies | tx_out count | compactSize uint (LE) | Number of TX outputs |
30
+ /// | varies | tx_out | txOut[] | TX outputs |
31
+ /// | 4 | lock_time | uint32_t (LE) | Unix time or block number |
32
+ ///
33
+ //
34
+ /// Non-coinbase transaction input (txIn):
35
+ ///
36
+ /// | Bytes | Name | BTC type | Description |
37
+ /// |--------|------------------|------------------------|---------------------------------------------|
38
+ /// | 36 | previous_output | outpoint | The previous outpoint being spent |
39
+ /// | varies | script bytes | compactSize uint (LE) | The number of bytes in the signature script |
40
+ /// | varies | signature script | char[] | The signature script, empty for P2WSH |
41
+ /// | 4 | sequence | uint32_t (LE) | Sequence number |
42
+ ///
43
+ ///
44
+ /// The reference to transaction being spent (outpoint):
45
+ ///
46
+ /// | Bytes | Name | BTC type | Description |
47
+ /// |-------|-------|---------------|------------------------------------------|
48
+ /// | 32 | hash | char[32] | Hash of the transaction to spend |
49
+ /// | 4 | index | uint32_t (LE) | Index of the specific output from the TX |
50
+ ///
51
+ ///
52
+ /// Transaction output (txOut):
53
+ ///
54
+ /// | Bytes | Name | BTC type | Description |
55
+ /// |--------|-----------------|-----------------------|--------------------------------------|
56
+ /// | 8 | value | int64_t (LE) | Number of satoshis to spend |
57
+ /// | 1+ | pk_script_bytes | compactSize uint (LE) | Number of bytes in the pubkey script |
58
+ /// | varies | pk_script | char[] | Pubkey script |
59
+ ///
60
+ /// compactSize uint format:
61
+ ///
62
+ /// | Value | Bytes | Format |
63
+ /// |-----------------------------------------|-------|----------------------------------------------|
64
+ /// | >= 0 && <= 252 | 1 | uint8_t |
65
+ /// | >= 253 && <= 0xffff | 3 | 0xfd followed by the number as uint16_t (LE) |
66
+ /// | >= 0x10000 && <= 0xffffffff | 5 | 0xfe followed by the number as uint32_t (LE) |
67
+ /// | >= 0x100000000 && <= 0xffffffffffffffff | 9 | 0xff followed by the number as uint64_t (LE) |
68
+ ///
69
+ /// (*) compactSize uint is often references as VarInt)
70
+ ///
71
+ library BitcoinTx {
72
+ /// @notice Represents Bitcoin transaction data for funding BTC deposit
73
+ /// P2(W)SH transaction.
74
+ struct Info {
75
+ /// @notice Bitcoin transaction version
76
+ /// @dev `version` from raw Bitcon transaction data.
77
+ /// Encoded as 4-bytes signed integer, little endian.
78
+ bytes4 version;
79
+ /// @notice All Bitcoin transaction inputs, prepended by the number of
80
+ /// transaction inputs.
81
+ /// @dev `tx_in_count | tx_in` from raw Bitcon transaction data.
82
+ ///
83
+ /// The number of transaction inputs encoded as compactSize
84
+ /// unsigned integer, little-endian.
85
+ ///
86
+ /// Note that some popular block explorers reverse the order of
87
+ /// bytes from `outpoint`'s `hash` and display it as big-endian.
88
+ /// Solidity code of Bridge expects hashes in little-endian, just
89
+ /// like they are represented in a raw Bitcoin transaction.
90
+ bytes inputVector;
91
+ /// @notice All Bitcoin transaction outputs prepended by the number of
92
+ /// transaction outputs.
93
+ /// @dev `tx_out_count | tx_out` from raw Bitcoin transaction data.
94
+ ///
95
+ /// The number of transaction outputs encoded as a compactSize
96
+ /// unsigned integer, little-endian.
97
+ bytes outputVector;
98
+ /// @notice Bitcoin transaction locktime.
99
+ ///
100
+ /// @dev `lock_time` from raw Bitcoin transaction data.
101
+ /// Encoded as 4-bytes unsigned integer, little endian.
102
+ bytes4 locktime;
103
+ }
104
+ }