@keep-network/tbtc-v2 0.1.1-dev.5 → 0.1.1-dev.9

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": "0x60806040523480156200001157600080fd5b5062000032620000266200003860201b60201c565b6200004060201b60201c565b62000104565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6131e780620001146000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c80638d658d4e1161005b5780638d658d4e146101025780638da5cb5b1461011e578063e53c0b551461013c578063f2fde38b1461016c57610088565b806325750db71461008d57806343c6de29146100a957806360d712fc146100dc578063715018a6146100f8575b600080fd5b6100a760048036038101906100a29190611cf5565b610188565b005b6100c360048036038101906100be9190611d4a565b6107b9565b6040516100d39493929190612455565b60405180910390f35b6100f660048036038101906100f19190611b6a565b610846565b005b61010061096b565b005b61011c60048036038101906101179190611c4a565b6109f3565b005b6101266109f9565b604051610133919061243a565b60405180910390f35b61015660048036038101906101519190611b41565b610a22565b604051610163919061249a565b60405180910390f35b61018660048036038101906101819190611b41565b610a42565b005b600073ffffffffffffffffffffffffffffffffffffffff168160c00160208101906101b39190611b41565b73ffffffffffffffffffffffffffffffffffffffff1614806102305750600160008260c00160208101906101e79190611b41565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61026f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161026690612593565b60405180910390fd5b60008160200160208101906102849190611b41565b8260400160208101906102979190611c21565b8360600160208101906102aa9190611ba6565b8460800160208101906102bd9190611ba6565b8560a00160208101906102d09190611bf8565b6040516020016102e49594939291906122ff565b6040516020818303038152906040529050600061037183600001602081019061030d9190611d73565b60ff168580604001906103209190612693565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050610b3a90919063ffffffff16565b9050600061037e82610d7a565b90506014815114156103e7576103938361111c565b805190602001208180519060200120146103e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103d990612633565b60405180910390fd5b6104cb565b60208151141561048f5760028360405161040191906122e8565b602060405180830381855afa15801561041e573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906104419190611bcf565b61044a826111e9565b1461048a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610481906125b3565b60405180910390fd5b6104ca565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104c1906125d3565b60405180910390fd5b5b600061053f8660000160208101906104e39190611bf8565b8780602001906104f39190612693565b8980604001906105039190612693565b8b60600160208101906105169190611bf8565b60405160200161052b9695949392919061229e565b60405160208183030381529060405261120c565b90506000600260008388600001602081019061055b9190611d73565b60405160200161056c929190612272565b6040516020818303038152906040528051906020012060001c81526020019081526020016000209050600081600001601c9054906101000a900463ffffffff1663ffffffff16146105f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105e990612613565b60405180910390fd5b600060208501519050808260000160146101000a81548167ffffffffffffffff021916908360c01c02179055508660200160208101906106329190611b41565b8260000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055504282600001601c6101000a81548163ffffffff021916908363ffffffff1602179055508660c00160208101906106aa9190611b41565b8260010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f293519c6fe266b8b9ca154d153e408c6ef03135a5abeb42e9a91781d620ca47b838860000160208101906107219190611d73565b8960200160208101906107349190611b41565b8a60400160208101906107479190611c21565b8b606001602081019061075a9190611ba6565b8c608001602081019061076d9190611ba6565b8d60a00160208101906107809190611bf8565b8e60c00160208101906107939190611b41565b6040516107a79897969594939291906124b5565b60405180910390a15050505050505050565b60026020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060000160149054906101000a900460c01b9080600001601c9054906101000a900463ffffffff16908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905084565b61084e6112d2565b73ffffffffffffffffffffffffffffffffffffffff1661086c6109f9565b73ffffffffffffffffffffffffffffffffffffffff16146108c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108b9906125f3565b60405180910390fd5b80600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9065599c12c4294d9e2201638226d0d0beb95c228f468c4e7c2bdb8322b6066f8260405161095f919061249a565b60405180910390a25050565b6109736112d2565b73ffffffffffffffffffffffffffffffffffffffff166109916109f9565b73ffffffffffffffffffffffffffffffffffffffff16146109e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109de906125f3565b60405180910390fd5b6109f160006112da565b565b50505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60016020528060005260406000206000915054906101000a900460ff1681565b610a4a6112d2565b73ffffffffffffffffffffffffffffffffffffffff16610a686109f9565b73ffffffffffffffffffffffffffffffffffffffff1614610abe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab5906125f3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610b2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2590612533565b60405180910390fd5b610b37816112da565b50565b6060600080610b488561139e565b80925081935050507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415610bb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610baa90612553565b60405180910390fd5b808410610bf5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bec90612653565b60405180910390fd5b6060600080846001610c079190612772565b905060005b87811015610cc657610c3582838b51610c2591906129ca565b8b61149a9092919063ffffffff16565b9350610c4084611560565b92507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831415610ca5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9c90612573565b60405180910390fd5b8282610cb19190612772565b91508080610cbe90612b98565b915050610c0c565b50610ce881828a51610cd891906129ca565b8a61149a9092919063ffffffff16565b9250610cf383611560565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415610d58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4f90612573565b60405180910390fd5b610d6d81838a61149a9092919063ffffffff16565b9550505050505092915050565b6060600082600881518110610db8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b60f81c90508251600982610dd791906127c8565b60ff1614610df75760405180602001604052806000815250915050611117565b600083600981518110610e33577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b60f81c60ff161415610f265760028160ff161015610e6e5760405180602001604052806000815250915050611117565b600083600a81518110610eaa577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b60f81c60ff169050600282610eca91906129fe565b60ff1681141580610ee9575060208114158015610ee8575060148114155b5b15610f07576040518060200160405280600081525092505050611117565b610f1d600b828661149a9092919063ffffffff16565b92505050611117565b6000610f3f60086003866116449092919063ffffffff16565b90507fe1683aec1a10d43657f3f2c82e683d8e19e8a3f320ce9d3bf22c6ca6ab4cbce681141561104357601484600b81518110610fa5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b60f81c60ff1614158061100557507f3b50b2715f5a28d2a7eeb517f17ec797e8536bd425bf31fc4f6bf7ce1e34b77d61100260028651610ff091906129ca565b6002876116449092919063ffffffff16565b14155b15611023576040518060200160405280600081525092505050611117565b61103a600c60148661149a9092919063ffffffff16565b92505050611117565b7fa0916ee0b243ee20fb4ce56170744d86b54d7ae03a418a7a12156f40dedcf7d7811415611102576087846001865161107c91906129ca565b815181106110b3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b60f81c60ff16146110e2576040518060200160405280600081525092505050611117565b6110f9600b60148661149a9092919063ffffffff16565b92505050611117565b50604051806020016040528060008152509150505b919050565b6060600360028360405161113091906122e8565b602060405180830381855afa15801561114d573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906111709190611bcf565b6040516020016111809190612257565b60405160208183030381529060405260405161119c91906122e8565b602060405180830381855afa1580156111b9573d6000803e3d6000fd5b5050506040515160601b6040516020016111d3919061223c565b6040516020818303038152906040529050919050565b600080825114156111ff576000801b9050611207565b602082015190505b919050565b60006002808360405161121f91906122e8565b602060405180830381855afa15801561123c573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061125f9190611bcf565b60405160200161126f9190612257565b60405160208183030381529060405260405161128b91906122e8565b602060405180830381855afa1580156112a8573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906112cb9190611bcf565b9050919050565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008060006113ac846116b6565b905060008160ff161415611414576000846000815181106113f6577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b60f81c8060ff1690509250925050611495565b80600161142191906127c8565b60ff1684511015611459577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60009250925050611495565b600061148461147f61147a60018560ff168961149a9092919063ffffffff16565b6117d6565b61193d565b905081818160ff1691509350935050505b915091565b606060008214156114bc57604051806020016040528060008152509050611559565b600082846114ca9190612772565b905083811180156114dc575080855110155b61151b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151290612673565b60405180910390fd5b604051915082604083010160405282825283850182038460208701018481015b808210156115545781518383015260208201915061153b565b505050505b9392505050565b6000600982511015611594577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff905061163f565b60006115b860088085516115a891906129ca565b8561149a9092919063ffffffff16565b90506000806115c68361139e565b80925081935050507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415611621577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff935050505061163f565b8082600961162f9190612772565b6116399190612772565b93505050505b919050565b60008082846116539190612772565b90508381118015611665575080855110155b6116a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169b90612673565b60405180910390fd5b82846020870101209150509392505050565b600060ff826000815181106116f4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b60f81c60ff16141561171457600890506117d1565b60fe82600081518110611750577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b60f81c60ff16141561177057600490506117d1565b60fd826000815181106117ac577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b60f81c60ff1614156117cc57600290506117d1565b600090505b919050565b60606000825167ffffffffffffffff81111561181b577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f19166020018201604052801561184d5781602001600182028036833780820191505090505b50905060005b835181101561193357838181518110611895577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b8260018387516118b091906129ca565b6118ba91906129ca565b815181106118f1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350808061192b90612b98565b915050611853565b5080915050919050565b60008060005b83518110156119f1576001816119599190612772565b845161196591906129ca565b60086119719190612970565b600261197d9190612852565b8482815181106119b6577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b60f81c60ff166119d19190612970565b826119dc9190612772565b915080806119e990612b98565b915050611943565b5080915050919050565b6000611a0e611a098461270f565b6126ea565b905082815260208101848484011115611a2657600080fd5b611a31848285612b25565b509392505050565b600081359050611a48816130f9565b92915050565b600081359050611a5d81613110565b92915050565b600081359050611a7281613127565b92915050565b600081519050611a878161313e565b92915050565b600081359050611a9c81613155565b92915050565b600081359050611ab18161316c565b92915050565b600082601f830112611ac857600080fd5b8135611ad88482602086016119fb565b91505092915050565b600060808284031215611af357600080fd5b81905092915050565b600060e08284031215611b0e57600080fd5b81905092915050565b600081359050611b2681613183565b92915050565b600081359050611b3b8161319a565b92915050565b600060208284031215611b5357600080fd5b6000611b6184828501611a39565b91505092915050565b60008060408385031215611b7d57600080fd5b6000611b8b85828601611a39565b9250506020611b9c85828601611a4e565b9150509250929050565b600060208284031215611bb857600080fd5b6000611bc684828501611a63565b91505092915050565b600060208284031215611be157600080fd5b6000611bef84828501611a78565b91505092915050565b600060208284031215611c0a57600080fd5b6000611c1884828501611a8d565b91505092915050565b600060208284031215611c3357600080fd5b6000611c4184828501611aa2565b91505092915050565b60008060008060808587031215611c6057600080fd5b600085013567ffffffffffffffff811115611c7a57600080fd5b611c8687828801611ae1565b945050602085013567ffffffffffffffff811115611ca357600080fd5b611caf87828801611ab7565b9350506040611cc087828801611b17565b925050606085013567ffffffffffffffff811115611cdd57600080fd5b611ce987828801611ab7565b91505092959194509250565b6000806101008385031215611d0957600080fd5b600083013567ffffffffffffffff811115611d2357600080fd5b611d2f85828601611ae1565b9250506020611d4085828601611afc565b9150509250929050565b600060208284031215611d5c57600080fd5b6000611d6a84828501611b17565b91505092915050565b600060208284031215611d8557600080fd5b6000611d9384828501611b2c565b91505092915050565b611da581612a32565b82525050565b611dbc611db782612a32565b612be1565b82525050565b611dcb81612a44565b82525050565b611dda81612a50565b82525050565b611df1611dec82612a50565b612bf3565b82525050565b611e0081612a7c565b82525050565b611e17611e1282612a7c565b612bfd565b82525050565b611e2681612a86565b82525050565b611e3d611e3882612a86565b612c07565b82525050565b611e4c81612ab2565b82525050565b611e63611e5e82612ab2565b612c11565b82525050565b6000611e75838561274b565b9350611e82838584612b25565b82840190509392505050565b6000611e9982612740565b611ea3818561274b565b9350611eb3818560208601612b34565b80840191505092915050565b6000611ecc600183612767565b9150611ed782612cd5565b600182019050919050565b6000611eef600183612767565b9150611efa82612cfe565b600182019050919050565b6000611f12602683612756565b9150611f1d82612d27565b604082019050919050565b6000611f35600183612767565b9150611f4082612d76565b600182019050919050565b6000611f58600183612767565b9150611f6382612d9f565b600182019050919050565b6000611f7b602283612756565b9150611f8682612dc8565b604082019050919050565b6000611f9e601a83612756565b9150611fa982612e17565b602082019050919050565b6000611fc1600183612767565b9150611fcc82612e40565b600182019050919050565b6000611fe4601483612756565b9150611fef82612e69565b602082019050919050565b6000612007600183612767565b915061201282612e92565b600182019050919050565b600061202a600183612767565b915061203582612ebb565b600182019050919050565b600061204d601983612756565b915061205882612ee4565b602082019050919050565b6000612070601883612756565b915061207b82612f0d565b602082019050919050565b6000612093600183612767565b915061209e82612f36565b600182019050919050565b60006120b6602083612756565b91506120c182612f5f565b602082019050919050565b60006120d9600183612767565b91506120e482612f88565b600182019050919050565b60006120fc600183612767565b915061210782612fb1565b600182019050919050565b600061211f601883612756565b915061212a82612fda565b602082019050919050565b6000612142601983612756565b915061214d82613003565b602082019050919050565b6000612165600183612767565b91506121708261302c565b600182019050919050565b6000612188601183612756565b915061219382613055565b602082019050919050565b60006121ab601383612756565b91506121b68261307e565b602082019050919050565b60006121ce600183612767565b91506121d9826130a7565b600182019050919050565b60006121f1600183612767565b91506121fc826130d0565b600182019050919050565b61221081612b08565b82525050565b61221f81612b18565b82525050565b61223661223182612b18565b612c2d565b82525050565b60006122488284611de0565b60148201915081905092915050565b60006122638284611e06565b60208201915081905092915050565b600061227e8285611e06565b60208201915061228e8284612225565b6001820191508190509392505050565b60006122aa8289611e2c565b6004820191506122bb828789611e69565b91506122c8828587611e69565b91506122d48284611e2c565b600482019150819050979650505050505050565b60006122f48284611e8e565b915081905092915050565b600061230a82611fb4565b91506123168288611dab565b60148201915061232582611f4b565b915061233082612158565b915061233c8287611e52565b60088201915061234b82611f4b565b9150612356826120cc565b915061236182611ffa565b915061236c82611fb4565b91506123788286611de0565b60148201915061238782612086565b915061239282611ebf565b915061239d826121e4565b91506123a882611ee2565b91506123b3826120cc565b91506123be82611ffa565b91506123c982611fb4565b91506123d58285611de0565b6014820191506123e482611f28565b91506123ef826121c1565b91506123fb8284611e2c565b60048201915061240a8261201d565b915061241582611f4b565b9150612420826121e4565b915061242b826120ef565b91508190509695505050505050565b600060208201905061244f6000830184611d9c565b92915050565b600060808201905061246a6000830187611d9c565b6124776020830186611e43565b6124846040830185612207565b6124916060830184611d9c565b95945050505050565b60006020820190506124af6000830184611dc2565b92915050565b6000610100820190506124cb600083018b611df7565b6124d8602083018a612216565b6124e56040830189611d9c565b6124f26060830188611e43565b6124ff6080830187611dd1565b61250c60a0830186611dd1565b61251960c0830185611e1d565b61252660e0830184611d9c565b9998505050505050505050565b6000602082019050818103600083015261254c81611f05565b9050919050565b6000602082019050818103600083015261256c81611f6e565b9050919050565b6000602082019050818103600083015261258c81611f91565b9050919050565b600060208201905081810360008301526125ac81611fd7565b9050919050565b600060208201905081810360008301526125cc81612040565b9050919050565b600060208201905081810360008301526125ec81612063565b9050919050565b6000602082019050818103600083015261260c816120a9565b9050919050565b6000602082019050818103600083015261262c81612112565b9050919050565b6000602082019050818103600083015261264c81612135565b9050919050565b6000602082019050818103600083015261266c8161217b565b9050919050565b6000602082019050818103600083015261268c8161219e565b9050919050565b600080833560016020038436030381126126ac57600080fd5b80840192508235915067ffffffffffffffff8211156126ca57600080fd5b6020830192506001820236038313156126e257600080fd5b509250929050565b60006126f4612705565b90506127008282612b67565b919050565b6000604051905090565b600067ffffffffffffffff82111561272a57612729612c6e565b5b61273382612c9d565b9050602081019050919050565b600081519050919050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061277d82612afe565b915061278883612afe565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156127bd576127bc612c3f565b5b828201905092915050565b60006127d382612b18565b91506127de83612b18565b92508260ff038211156127f4576127f3612c3f565b5b828201905092915050565b6000808291508390505b60018511156128495780860481111561282557612824612c3f565b5b60018516156128345780820291505b808102905061284285612cc8565b9450612809565b94509492505050565b600061285d82612afe565b915061286883612afe565b92506128957fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848461289d565b905092915050565b6000826128ad5760019050612969565b816128bb5760009050612969565b81600181146128d157600281146128db5761290a565b6001915050612969565b60ff8411156128ed576128ec612c3f565b5b8360020a91508482111561290457612903612c3f565b5b50612969565b5060208310610133831016604e8410600b841016171561293f5782820a90508381111561293a57612939612c3f565b5b612969565b61294c84848460016127ff565b9250905081840481111561296357612962612c3f565b5b81810290505b9392505050565b600061297b82612afe565b915061298683612afe565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156129bf576129be612c3f565b5b828202905092915050565b60006129d582612afe565b91506129e083612afe565b9250828210156129f3576129f2612c3f565b5b828203905092915050565b6000612a0982612b18565b9150612a1483612b18565b925082821015612a2757612a26612c3f565b5b828203905092915050565b6000612a3d82612ade565b9050919050565b60008115159050919050565b60007fffffffffffffffffffffffffffffffffffffffff00000000000000000000000082169050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60007fffffffffffffffff00000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b83811015612b52578082015181840152602081019050612b37565b83811115612b61576000848401525b50505050565b612b7082612c9d565b810181811067ffffffffffffffff82111715612b8f57612b8e612c6e565b5b80604052505050565b6000612ba382612afe565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612bd657612bd5612c3f565b5b600182019050919050565b6000612bec82612c1b565b9050919050565b6000819050919050565b6000819050919050565b6000819050919050565b6000819050919050565b6000612c2682612cbb565b9050919050565b6000612c3882612cae565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160f81b9050919050565b60008160601b9050919050565b60008160011c9050919050565b7f6300000000000000000000000000000000000000000000000000000000000000600082015250565b7f6700000000000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f8800000000000000000000000000000000000000000000000000000000000000600082015250565b7f7500000000000000000000000000000000000000000000000000000000000000600082015250565b7f52656164206f76657272756e20647572696e6720566172496e7420706172736960008201527f6e67000000000000000000000000000000000000000000000000000000000000602082015250565b7f42616420566172496e7420696e207363726970745075626b6579000000000000600082015250565b7f1400000000000000000000000000000000000000000000000000000000000000600082015250565b7f5661756c74206973206e6f742074727573746564000000000000000000000000600082015250565b7fa900000000000000000000000000000000000000000000000000000000000000600082015250565b7fb100000000000000000000000000000000000000000000000000000000000000600082015250565b7f57726f6e672033322d6279746520736372697074206861736800000000000000600082015250565b7f57726f6e67207363726970742068617368206c656e6774680000000000000000600082015250565b7f8700000000000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f7600000000000000000000000000000000000000000000000000000000000000600082015250565b7f6800000000000000000000000000000000000000000000000000000000000000600082015250565b7f4465706f73697420616c72656164792072657665616c65640000000000000000600082015250565b7f57726f6e672032302d6279746520736372697074206861736800000000000000600082015250565b7f0800000000000000000000000000000000000000000000000000000000000000600082015250565b7f566f75742072656164206f76657272756e000000000000000000000000000000600082015250565b7f536c696365206f7574206f6620626f756e647300000000000000000000000000600082015250565b7f0400000000000000000000000000000000000000000000000000000000000000600082015250565b7fac00000000000000000000000000000000000000000000000000000000000000600082015250565b61310281612a32565b811461310d57600080fd5b50565b61311981612a44565b811461312457600080fd5b50565b61313081612a50565b811461313b57600080fd5b50565b61314781612a7c565b811461315257600080fd5b50565b61315e81612a86565b811461316957600080fd5b50565b61317581612ab2565b811461318057600080fd5b50565b61318c81612afe565b811461319757600080fd5b50565b6131a381612b18565b81146131ae57600080fd5b5056fea264697066735822122079bf88bf7acdd1303b23799e487320e530481f36051202aa20c67e3155e569e564736f6c63430008040033",
332
+ "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100885760003560e01c80638d658d4e1161005b5780638d658d4e146101025780638da5cb5b1461011e578063e53c0b551461013c578063f2fde38b1461016c57610088565b806325750db71461008d57806343c6de29146100a957806360d712fc146100dc578063715018a6146100f8575b600080fd5b6100a760048036038101906100a29190611cf5565b610188565b005b6100c360048036038101906100be9190611d4a565b6107b9565b6040516100d39493929190612455565b60405180910390f35b6100f660048036038101906100f19190611b6a565b610846565b005b61010061096b565b005b61011c60048036038101906101179190611c4a565b6109f3565b005b6101266109f9565b604051610133919061243a565b60405180910390f35b61015660048036038101906101519190611b41565b610a22565b604051610163919061249a565b60405180910390f35b61018660048036038101906101819190611b41565b610a42565b005b600073ffffffffffffffffffffffffffffffffffffffff168160c00160208101906101b39190611b41565b73ffffffffffffffffffffffffffffffffffffffff1614806102305750600160008260c00160208101906101e79190611b41565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61026f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161026690612593565b60405180910390fd5b60008160200160208101906102849190611b41565b8260400160208101906102979190611c21565b8360600160208101906102aa9190611ba6565b8460800160208101906102bd9190611ba6565b8560a00160208101906102d09190611bf8565b6040516020016102e49594939291906122ff565b6040516020818303038152906040529050600061037183600001602081019061030d9190611d73565b60ff168580604001906103209190612693565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050610b3a90919063ffffffff16565b9050600061037e82610d7a565b90506014815114156103e7576103938361111c565b805190602001208180519060200120146103e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103d990612633565b60405180910390fd5b6104cb565b60208151141561048f5760028360405161040191906122e8565b602060405180830381855afa15801561041e573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906104419190611bcf565b61044a826111e9565b1461048a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610481906125b3565b60405180910390fd5b6104ca565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104c1906125d3565b60405180910390fd5b5b600061053f8660000160208101906104e39190611bf8565b8780602001906104f39190612693565b8980604001906105039190612693565b8b60600160208101906105169190611bf8565b60405160200161052b9695949392919061229e565b60405160208183030381529060405261120c565b90506000600260008388600001602081019061055b9190611d73565b60405160200161056c929190612272565b6040516020818303038152906040528051906020012060001c81526020019081526020016000209050600081600001601c9054906101000a900463ffffffff1663ffffffff16146105f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105e990612613565b60405180910390fd5b600060208501519050808260000160146101000a81548167ffffffffffffffff021916908360c01c02179055508660200160208101906106329190611b41565b8260000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055504282600001601c6101000a81548163ffffffff021916908363ffffffff1602179055508660c00160208101906106aa9190611b41565b8260010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f293519c6fe266b8b9ca154d153e408c6ef03135a5abeb42e9a91781d620ca47b838860000160208101906107219190611d73565b8960200160208101906107349190611b41565b8a60400160208101906107479190611c21565b8b606001602081019061075a9190611ba6565b8c608001602081019061076d9190611ba6565b8d60a00160208101906107809190611bf8565b8e60c00160208101906107939190611b41565b6040516107a79897969594939291906124b5565b60405180910390a15050505050505050565b60026020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060000160149054906101000a900460c01b9080600001601c9054906101000a900463ffffffff16908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905084565b61084e6112d2565b73ffffffffffffffffffffffffffffffffffffffff1661086c6109f9565b73ffffffffffffffffffffffffffffffffffffffff16146108c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108b9906125f3565b60405180910390fd5b80600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9065599c12c4294d9e2201638226d0d0beb95c228f468c4e7c2bdb8322b6066f8260405161095f919061249a565b60405180910390a25050565b6109736112d2565b73ffffffffffffffffffffffffffffffffffffffff166109916109f9565b73ffffffffffffffffffffffffffffffffffffffff16146109e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109de906125f3565b60405180910390fd5b6109f160006112da565b565b50505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60016020528060005260406000206000915054906101000a900460ff1681565b610a4a6112d2565b73ffffffffffffffffffffffffffffffffffffffff16610a686109f9565b73ffffffffffffffffffffffffffffffffffffffff1614610abe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab5906125f3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610b2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2590612533565b60405180910390fd5b610b37816112da565b50565b6060600080610b488561139e565b80925081935050507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415610bb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610baa90612553565b60405180910390fd5b808410610bf5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bec90612653565b60405180910390fd5b6060600080846001610c079190612772565b905060005b87811015610cc657610c3582838b51610c2591906129ca565b8b61149a9092919063ffffffff16565b9350610c4084611560565b92507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831415610ca5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9c90612573565b60405180910390fd5b8282610cb19190612772565b91508080610cbe90612b98565b915050610c0c565b50610ce881828a51610cd891906129ca565b8a61149a9092919063ffffffff16565b9250610cf383611560565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415610d58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4f90612573565b60405180910390fd5b610d6d81838a61149a9092919063ffffffff16565b9550505050505092915050565b6060600082600881518110610db8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b60f81c90508251600982610dd791906127c8565b60ff1614610df75760405180602001604052806000815250915050611117565b600083600981518110610e33577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b60f81c60ff161415610f265760028160ff161015610e6e5760405180602001604052806000815250915050611117565b600083600a81518110610eaa577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b60f81c60ff169050600282610eca91906129fe565b60ff1681141580610ee9575060208114158015610ee8575060148114155b5b15610f07576040518060200160405280600081525092505050611117565b610f1d600b828661149a9092919063ffffffff16565b92505050611117565b6000610f3f60086003866116449092919063ffffffff16565b90507fe1683aec1a10d43657f3f2c82e683d8e19e8a3f320ce9d3bf22c6ca6ab4cbce681141561104357601484600b81518110610fa5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b60f81c60ff1614158061100557507f3b50b2715f5a28d2a7eeb517f17ec797e8536bd425bf31fc4f6bf7ce1e34b77d61100260028651610ff091906129ca565b6002876116449092919063ffffffff16565b14155b15611023576040518060200160405280600081525092505050611117565b61103a600c60148661149a9092919063ffffffff16565b92505050611117565b7fa0916ee0b243ee20fb4ce56170744d86b54d7ae03a418a7a12156f40dedcf7d7811415611102576087846001865161107c91906129ca565b815181106110b3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b60f81c60ff16146110e2576040518060200160405280600081525092505050611117565b6110f9600b60148661149a9092919063ffffffff16565b92505050611117565b50604051806020016040528060008152509150505b919050565b6060600360028360405161113091906122e8565b602060405180830381855afa15801561114d573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906111709190611bcf565b6040516020016111809190612257565b60405160208183030381529060405260405161119c91906122e8565b602060405180830381855afa1580156111b9573d6000803e3d6000fd5b5050506040515160601b6040516020016111d3919061223c565b6040516020818303038152906040529050919050565b600080825114156111ff576000801b9050611207565b602082015190505b919050565b60006002808360405161121f91906122e8565b602060405180830381855afa15801561123c573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061125f9190611bcf565b60405160200161126f9190612257565b60405160208183030381529060405260405161128b91906122e8565b602060405180830381855afa1580156112a8573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906112cb9190611bcf565b9050919050565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008060006113ac846116b6565b905060008160ff161415611414576000846000815181106113f6577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b60f81c8060ff1690509250925050611495565b80600161142191906127c8565b60ff1684511015611459577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60009250925050611495565b600061148461147f61147a60018560ff168961149a9092919063ffffffff16565b6117d6565b61193d565b905081818160ff1691509350935050505b915091565b606060008214156114bc57604051806020016040528060008152509050611559565b600082846114ca9190612772565b905083811180156114dc575080855110155b61151b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151290612673565b60405180910390fd5b604051915082604083010160405282825283850182038460208701018481015b808210156115545781518383015260208201915061153b565b505050505b9392505050565b6000600982511015611594577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff905061163f565b60006115b860088085516115a891906129ca565b8561149a9092919063ffffffff16565b90506000806115c68361139e565b80925081935050507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415611621577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff935050505061163f565b8082600961162f9190612772565b6116399190612772565b93505050505b919050565b60008082846116539190612772565b90508381118015611665575080855110155b6116a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169b90612673565b60405180910390fd5b82846020870101209150509392505050565b600060ff826000815181106116f4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b60f81c60ff16141561171457600890506117d1565b60fe82600081518110611750577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b60f81c60ff16141561177057600490506117d1565b60fd826000815181106117ac577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b60f81c60ff1614156117cc57600290506117d1565b600090505b919050565b60606000825167ffffffffffffffff81111561181b577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f19166020018201604052801561184d5781602001600182028036833780820191505090505b50905060005b835181101561193357838181518110611895577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b8260018387516118b091906129ca565b6118ba91906129ca565b815181106118f1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350808061192b90612b98565b915050611853565b5080915050919050565b60008060005b83518110156119f1576001816119599190612772565b845161196591906129ca565b60086119719190612970565b600261197d9190612852565b8482815181106119b6577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b60f81c60ff166119d19190612970565b826119dc9190612772565b915080806119e990612b98565b915050611943565b5080915050919050565b6000611a0e611a098461270f565b6126ea565b905082815260208101848484011115611a2657600080fd5b611a31848285612b25565b509392505050565b600081359050611a48816130f9565b92915050565b600081359050611a5d81613110565b92915050565b600081359050611a7281613127565b92915050565b600081519050611a878161313e565b92915050565b600081359050611a9c81613155565b92915050565b600081359050611ab18161316c565b92915050565b600082601f830112611ac857600080fd5b8135611ad88482602086016119fb565b91505092915050565b600060808284031215611af357600080fd5b81905092915050565b600060e08284031215611b0e57600080fd5b81905092915050565b600081359050611b2681613183565b92915050565b600081359050611b3b8161319a565b92915050565b600060208284031215611b5357600080fd5b6000611b6184828501611a39565b91505092915050565b60008060408385031215611b7d57600080fd5b6000611b8b85828601611a39565b9250506020611b9c85828601611a4e565b9150509250929050565b600060208284031215611bb857600080fd5b6000611bc684828501611a63565b91505092915050565b600060208284031215611be157600080fd5b6000611bef84828501611a78565b91505092915050565b600060208284031215611c0a57600080fd5b6000611c1884828501611a8d565b91505092915050565b600060208284031215611c3357600080fd5b6000611c4184828501611aa2565b91505092915050565b60008060008060808587031215611c6057600080fd5b600085013567ffffffffffffffff811115611c7a57600080fd5b611c8687828801611ae1565b945050602085013567ffffffffffffffff811115611ca357600080fd5b611caf87828801611ab7565b9350506040611cc087828801611b17565b925050606085013567ffffffffffffffff811115611cdd57600080fd5b611ce987828801611ab7565b91505092959194509250565b6000806101008385031215611d0957600080fd5b600083013567ffffffffffffffff811115611d2357600080fd5b611d2f85828601611ae1565b9250506020611d4085828601611afc565b9150509250929050565b600060208284031215611d5c57600080fd5b6000611d6a84828501611b17565b91505092915050565b600060208284031215611d8557600080fd5b6000611d9384828501611b2c565b91505092915050565b611da581612a32565b82525050565b611dbc611db782612a32565b612be1565b82525050565b611dcb81612a44565b82525050565b611dda81612a50565b82525050565b611df1611dec82612a50565b612bf3565b82525050565b611e0081612a7c565b82525050565b611e17611e1282612a7c565b612bfd565b82525050565b611e2681612a86565b82525050565b611e3d611e3882612a86565b612c07565b82525050565b611e4c81612ab2565b82525050565b611e63611e5e82612ab2565b612c11565b82525050565b6000611e75838561274b565b9350611e82838584612b25565b82840190509392505050565b6000611e9982612740565b611ea3818561274b565b9350611eb3818560208601612b34565b80840191505092915050565b6000611ecc600183612767565b9150611ed782612cd5565b600182019050919050565b6000611eef600183612767565b9150611efa82612cfe565b600182019050919050565b6000611f12602683612756565b9150611f1d82612d27565b604082019050919050565b6000611f35600183612767565b9150611f4082612d76565b600182019050919050565b6000611f58600183612767565b9150611f6382612d9f565b600182019050919050565b6000611f7b602283612756565b9150611f8682612dc8565b604082019050919050565b6000611f9e601a83612756565b9150611fa982612e17565b602082019050919050565b6000611fc1600183612767565b9150611fcc82612e40565b600182019050919050565b6000611fe4601483612756565b9150611fef82612e69565b602082019050919050565b6000612007600183612767565b915061201282612e92565b600182019050919050565b600061202a600183612767565b915061203582612ebb565b600182019050919050565b600061204d601983612756565b915061205882612ee4565b602082019050919050565b6000612070601883612756565b915061207b82612f0d565b602082019050919050565b6000612093600183612767565b915061209e82612f36565b600182019050919050565b60006120b6602083612756565b91506120c182612f5f565b602082019050919050565b60006120d9600183612767565b91506120e482612f88565b600182019050919050565b60006120fc600183612767565b915061210782612fb1565b600182019050919050565b600061211f601883612756565b915061212a82612fda565b602082019050919050565b6000612142601983612756565b915061214d82613003565b602082019050919050565b6000612165600183612767565b91506121708261302c565b600182019050919050565b6000612188601183612756565b915061219382613055565b602082019050919050565b60006121ab601383612756565b91506121b68261307e565b602082019050919050565b60006121ce600183612767565b91506121d9826130a7565b600182019050919050565b60006121f1600183612767565b91506121fc826130d0565b600182019050919050565b61221081612b08565b82525050565b61221f81612b18565b82525050565b61223661223182612b18565b612c2d565b82525050565b60006122488284611de0565b60148201915081905092915050565b60006122638284611e06565b60208201915081905092915050565b600061227e8285611e06565b60208201915061228e8284612225565b6001820191508190509392505050565b60006122aa8289611e2c565b6004820191506122bb828789611e69565b91506122c8828587611e69565b91506122d48284611e2c565b600482019150819050979650505050505050565b60006122f48284611e8e565b915081905092915050565b600061230a82611fb4565b91506123168288611dab565b60148201915061232582611f4b565b915061233082612158565b915061233c8287611e52565b60088201915061234b82611f4b565b9150612356826120cc565b915061236182611ffa565b915061236c82611fb4565b91506123788286611de0565b60148201915061238782612086565b915061239282611ebf565b915061239d826121e4565b91506123a882611ee2565b91506123b3826120cc565b91506123be82611ffa565b91506123c982611fb4565b91506123d58285611de0565b6014820191506123e482611f28565b91506123ef826121c1565b91506123fb8284611e2c565b60048201915061240a8261201d565b915061241582611f4b565b9150612420826121e4565b915061242b826120ef565b91508190509695505050505050565b600060208201905061244f6000830184611d9c565b92915050565b600060808201905061246a6000830187611d9c565b6124776020830186611e43565b6124846040830185612207565b6124916060830184611d9c565b95945050505050565b60006020820190506124af6000830184611dc2565b92915050565b6000610100820190506124cb600083018b611df7565b6124d8602083018a612216565b6124e56040830189611d9c565b6124f26060830188611e43565b6124ff6080830187611dd1565b61250c60a0830186611dd1565b61251960c0830185611e1d565b61252660e0830184611d9c565b9998505050505050505050565b6000602082019050818103600083015261254c81611f05565b9050919050565b6000602082019050818103600083015261256c81611f6e565b9050919050565b6000602082019050818103600083015261258c81611f91565b9050919050565b600060208201905081810360008301526125ac81611fd7565b9050919050565b600060208201905081810360008301526125cc81612040565b9050919050565b600060208201905081810360008301526125ec81612063565b9050919050565b6000602082019050818103600083015261260c816120a9565b9050919050565b6000602082019050818103600083015261262c81612112565b9050919050565b6000602082019050818103600083015261264c81612135565b9050919050565b6000602082019050818103600083015261266c8161217b565b9050919050565b6000602082019050818103600083015261268c8161219e565b9050919050565b600080833560016020038436030381126126ac57600080fd5b80840192508235915067ffffffffffffffff8211156126ca57600080fd5b6020830192506001820236038313156126e257600080fd5b509250929050565b60006126f4612705565b90506127008282612b67565b919050565b6000604051905090565b600067ffffffffffffffff82111561272a57612729612c6e565b5b61273382612c9d565b9050602081019050919050565b600081519050919050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061277d82612afe565b915061278883612afe565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156127bd576127bc612c3f565b5b828201905092915050565b60006127d382612b18565b91506127de83612b18565b92508260ff038211156127f4576127f3612c3f565b5b828201905092915050565b6000808291508390505b60018511156128495780860481111561282557612824612c3f565b5b60018516156128345780820291505b808102905061284285612cc8565b9450612809565b94509492505050565b600061285d82612afe565b915061286883612afe565b92506128957fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848461289d565b905092915050565b6000826128ad5760019050612969565b816128bb5760009050612969565b81600181146128d157600281146128db5761290a565b6001915050612969565b60ff8411156128ed576128ec612c3f565b5b8360020a91508482111561290457612903612c3f565b5b50612969565b5060208310610133831016604e8410600b841016171561293f5782820a90508381111561293a57612939612c3f565b5b612969565b61294c84848460016127ff565b9250905081840481111561296357612962612c3f565b5b81810290505b9392505050565b600061297b82612afe565b915061298683612afe565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156129bf576129be612c3f565b5b828202905092915050565b60006129d582612afe565b91506129e083612afe565b9250828210156129f3576129f2612c3f565b5b828203905092915050565b6000612a0982612b18565b9150612a1483612b18565b925082821015612a2757612a26612c3f565b5b828203905092915050565b6000612a3d82612ade565b9050919050565b60008115159050919050565b60007fffffffffffffffffffffffffffffffffffffffff00000000000000000000000082169050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60007fffffffffffffffff00000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b83811015612b52578082015181840152602081019050612b37565b83811115612b61576000848401525b50505050565b612b7082612c9d565b810181811067ffffffffffffffff82111715612b8f57612b8e612c6e565b5b80604052505050565b6000612ba382612afe565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612bd657612bd5612c3f565b5b600182019050919050565b6000612bec82612c1b565b9050919050565b6000819050919050565b6000819050919050565b6000819050919050565b6000819050919050565b6000612c2682612cbb565b9050919050565b6000612c3882612cae565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160f81b9050919050565b60008160601b9050919050565b60008160011c9050919050565b7f6300000000000000000000000000000000000000000000000000000000000000600082015250565b7f6700000000000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f8800000000000000000000000000000000000000000000000000000000000000600082015250565b7f7500000000000000000000000000000000000000000000000000000000000000600082015250565b7f52656164206f76657272756e20647572696e6720566172496e7420706172736960008201527f6e67000000000000000000000000000000000000000000000000000000000000602082015250565b7f42616420566172496e7420696e207363726970745075626b6579000000000000600082015250565b7f1400000000000000000000000000000000000000000000000000000000000000600082015250565b7f5661756c74206973206e6f742074727573746564000000000000000000000000600082015250565b7fa900000000000000000000000000000000000000000000000000000000000000600082015250565b7fb100000000000000000000000000000000000000000000000000000000000000600082015250565b7f57726f6e672033322d6279746520736372697074206861736800000000000000600082015250565b7f57726f6e67207363726970742068617368206c656e6774680000000000000000600082015250565b7f8700000000000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f7600000000000000000000000000000000000000000000000000000000000000600082015250565b7f6800000000000000000000000000000000000000000000000000000000000000600082015250565b7f4465706f73697420616c72656164792072657665616c65640000000000000000600082015250565b7f57726f6e672032302d6279746520736372697074206861736800000000000000600082015250565b7f0800000000000000000000000000000000000000000000000000000000000000600082015250565b7f566f75742072656164206f76657272756e000000000000000000000000000000600082015250565b7f536c696365206f7574206f6620626f756e647300000000000000000000000000600082015250565b7f0400000000000000000000000000000000000000000000000000000000000000600082015250565b7fac00000000000000000000000000000000000000000000000000000000000000600082015250565b61310281612a32565b811461310d57600080fd5b50565b61311981612a44565b811461312457600080fd5b50565b61313081612a50565b811461313b57600080fd5b50565b61314781612a7c565b811461315257600080fd5b50565b61315e81612a86565b811461316957600080fd5b50565b61317581612ab2565b811461318057600080fd5b50565b61318c81612afe565b811461319757600080fd5b50565b6131a381612b18565b81146131ae57600080fd5b5056fea264697066735822122079bf88bf7acdd1303b23799e487320e530481f36051202aa20c67e3155e569e564736f6c63430008040033",
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/bee79fb22f312a454493922d15f47941.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/bee79fb22f312a454493922d15f47941.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/bee79fb22f312a454493922d15f47941.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/bee79fb22f312a454493922d15f47941.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
+ }