@layerzerolabs/lz-evm-messagelib-v2 2.0.13 → 2.0.15

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.
Files changed (110) hide show
  1. package/artifacts/contracts/Executor.sol/Executor.json +20 -20
  2. package/artifacts/contracts/ExecutorFeeLib.sol/ExecutorFeeLib.json +19 -19
  3. package/artifacts/contracts/MessageLibBase.sol/MessageLibBase.json +1 -1
  4. package/artifacts/contracts/PriceFeed.sol/PriceFeed.json +15 -15
  5. package/artifacts/contracts/ReceiveLibBaseE2.sol/ReceiveLibBaseE2.json +1 -1
  6. package/artifacts/contracts/SendLibBase.sol/SendLibBase.json +6 -6
  7. package/artifacts/contracts/SendLibBaseE2.sol/SendLibBaseE2.json +10 -10
  8. package/artifacts/contracts/Treasury.sol/Treasury.json +9 -9
  9. package/artifacts/contracts/Worker.sol/Worker.json +18 -18
  10. package/artifacts/contracts/interfaces/IExecutor.sol/IExecutor.json +3 -3
  11. package/artifacts/contracts/interfaces/IExecutorFeeLib.sol/IExecutorFeeLib.json +4 -4
  12. package/artifacts/contracts/interfaces/ILayerZeroPriceFeed.sol/ILayerZeroPriceFeed.json +3 -3
  13. package/artifacts/contracts/interfaces/IWorker.sol/IWorker.json +3 -3
  14. package/artifacts/contracts/uln/LzExecutor.sol/IReceiveUlnView.json +35 -0
  15. package/artifacts/contracts/uln/LzExecutor.sol/LzExecutor.json +279 -20
  16. package/artifacts/contracts/uln/ReceiveUlnBase.sol/ReceiveUlnBase.json +90 -11
  17. package/artifacts/contracts/uln/SendUlnBase.sol/SendUlnBase.json +7 -7
  18. package/artifacts/contracts/uln/UlnBase.sol/UlnBase.json +7 -7
  19. package/artifacts/contracts/uln/dvn/DVN.sol/DVN.json +31 -31
  20. package/artifacts/contracts/uln/dvn/DVNFeeLib.sol/DVNFeeLib.json +14 -14
  21. package/artifacts/contracts/uln/dvn/MultiSig.sol/MultiSig.json +5 -5
  22. package/artifacts/contracts/uln/dvn/adapters/CCIP/CCIPDVNAdapter.sol/CCIPDVNAdapter.json +488 -169
  23. package/artifacts/contracts/uln/dvn/adapters/CCIP/CCIPDVNAdapterFeeLib.sol/CCIPDVNAdapterFeeLib.json +372 -16
  24. package/artifacts/contracts/uln/dvn/adapters/DVNAdapterBase.sol/DVNAdapterBase.json +419 -93
  25. package/artifacts/contracts/uln/dvn/adapters/DVNAdapterBase.sol/IReceiveUln.json +34 -0
  26. package/artifacts/contracts/uln/dvn/adapters/DVNAdapterBase.sol/ISendLibBase.json +30 -0
  27. package/artifacts/contracts/uln/dvn/adapters/arbitrum/ArbitrumDVNAdapterL1.sol/ArbitrumDVNAdapterL1.json +936 -0
  28. package/artifacts/contracts/uln/dvn/adapters/arbitrum/ArbitrumDVNAdapterL2.sol/ArbitrumDVNAdapterL2.json +868 -0
  29. package/artifacts/contracts/uln/dvn/adapters/axelar/AxelarDVNAdapter.sol/AxelarDVNAdapter.json +611 -249
  30. package/artifacts/contracts/uln/dvn/adapters/axelar/AxelarDVNAdapter.sol/ISendLibBase.json +30 -0
  31. package/artifacts/contracts/uln/dvn/adapters/axelar/AxelarDVNAdapterFeeLib.sol/AxelarDVNAdapterFeeLib.json +526 -13
  32. package/artifacts/contracts/uln/dvn/adapters/libs/DVNAdapterMessageCodec.sol/DVNAdapterMessageCodec.json +16 -0
  33. package/artifacts/contracts/uln/dvn/adapters/optimism/OptimismDVNAdapterL1.sol/OptimismDVNAdapterL1.json +924 -0
  34. package/artifacts/contracts/uln/dvn/adapters/optimism/OptimismDVNAdapterL2.sol/OptimismDVNAdapterL2.json +891 -0
  35. package/artifacts/contracts/uln/interfaces/IDVN.sol/IDVN.json +3 -3
  36. package/artifacts/contracts/uln/interfaces/IDVNFeeLib.sol/IDVNFeeLib.json +1 -1
  37. package/artifacts/contracts/uln/interfaces/IReceiveUlnE2.sol/IReceiveUlnE2.json +0 -24
  38. package/artifacts/contracts/uln/interfaces/adapters/IAxelarDVNAdapter.sol/IAxelarDVNAdapter.json +160 -0
  39. package/artifacts/contracts/uln/interfaces/adapters/IAxelarDVNAdapterFeeLib.sol/IAxelarDVNAdapterFeeLib.json +282 -0
  40. package/artifacts/contracts/uln/interfaces/adapters/ICCIPDVNAdapter.sol/ICCIPDVNAdapter.json +91 -0
  41. package/artifacts/contracts/uln/interfaces/adapters/ICCIPDVNAdapterFeeLib.sol/ICCIPDVNAdapterFeeLib.json +290 -0
  42. package/artifacts/contracts/uln/libs/DVNOptions.sol/DVNOptions.json +4 -4
  43. package/artifacts/contracts/uln/libs/UlnOptions.sol/UlnOptions.json +7 -7
  44. package/artifacts/contracts/uln/uln301/AddressSizeConfig.sol/AddressSizeConfig.json +2 -2
  45. package/artifacts/contracts/uln/uln301/ReceiveLibBaseE1.sol/ReceiveLibBaseE1.json +5 -5
  46. package/artifacts/contracts/uln/uln301/ReceiveUln301.sol/ReceiveUln301.json +88 -57
  47. package/artifacts/contracts/uln/uln301/ReceiveUln301View.sol/IReceiveUln301.json +178 -0
  48. package/artifacts/contracts/uln/uln301/ReceiveUln301View.sol/ReceiveUln301View.json +126 -0
  49. package/artifacts/contracts/uln/uln301/SendLibBaseE1.sol/SendLibBaseE1.json +15 -15
  50. package/artifacts/contracts/uln/uln301/SendUln301.sol/SendUln301.json +76 -76
  51. package/artifacts/contracts/uln/uln301/TreasuryFeeHandler.sol/TreasuryFeeHandler.json +5 -5
  52. package/artifacts/contracts/uln/uln301/interfaces/IMessageLibE1.sol/IMessageLibE1.json +4 -4
  53. package/artifacts/contracts/uln/uln302/ReceiveUln302.sol/ReceiveUln302.json +79 -24
  54. package/artifacts/contracts/uln/uln302/ReceiveUln302View.sol/IReceiveUln302.json +146 -0
  55. package/artifacts/contracts/uln/uln302/ReceiveUln302View.sol/ReceiveUln302View.json +251 -0
  56. package/artifacts/contracts/uln/uln302/SendUln302.sol/SendUln302.json +75 -75
  57. package/artifacts/contracts/upgradeable/WorkerUpgradeable.sol/WorkerUpgradeable.json +18 -18
  58. package/contracts/ExecutorFeeLib.sol +6 -6
  59. package/contracts/MessageLibBase.sol +2 -2
  60. package/contracts/PriceFeed.sol +3 -3
  61. package/contracts/ReceiveLibBaseE2.sol +0 -26
  62. package/contracts/SendLibBase.sol +10 -10
  63. package/contracts/SendLibBaseE2.sol +4 -4
  64. package/contracts/Treasury.sol +2 -2
  65. package/contracts/Worker.sol +3 -3
  66. package/contracts/interfaces/IExecutorFeeLib.sol +4 -4
  67. package/contracts/interfaces/ILayerZeroPriceFeed.sol +3 -3
  68. package/contracts/interfaces/IWorker.sol +3 -3
  69. package/contracts/uln/LzExecutor.sol +51 -19
  70. package/contracts/uln/ReceiveUlnBase.sol +21 -14
  71. package/contracts/uln/UlnBase.sol +19 -19
  72. package/contracts/uln/dvn/DVN.sol +16 -16
  73. package/contracts/uln/dvn/DVNFeeLib.sol +2 -2
  74. package/contracts/uln/dvn/MultiSig.sol +13 -13
  75. package/contracts/uln/dvn/adapters/CCIP/CCIPDVNAdapter.sol +95 -97
  76. package/contracts/uln/dvn/adapters/CCIP/CCIPDVNAdapterFeeLib.sol +64 -2
  77. package/contracts/uln/dvn/adapters/DVNAdapterBase.sol +74 -124
  78. package/contracts/uln/dvn/adapters/arbitrum/ArbitrumDVNAdapterL1.sol +126 -0
  79. package/contracts/uln/dvn/adapters/arbitrum/ArbitrumDVNAdapterL2.sol +50 -0
  80. package/contracts/uln/dvn/adapters/avalanche/NOTES.md +4 -0
  81. package/contracts/uln/dvn/adapters/axelar/AxelarDVNAdapter.sol +85 -100
  82. package/contracts/uln/dvn/adapters/axelar/AxelarDVNAdapterFeeLib.sol +121 -2
  83. package/contracts/uln/dvn/adapters/libs/DVNAdapterMessageCodec.sol +36 -0
  84. package/contracts/uln/dvn/adapters/optimism/OptimismDVNAdapterL1.sol +86 -0
  85. package/contracts/uln/dvn/adapters/optimism/OptimismDVNAdapterL2.sol +58 -0
  86. package/contracts/uln/interfaces/IDVNFeeLib.sol +1 -1
  87. package/contracts/uln/interfaces/IReceiveUlnE2.sol +0 -5
  88. package/contracts/uln/interfaces/adapters/IAxelarDVNAdapter.sol +45 -0
  89. package/contracts/uln/interfaces/adapters/IAxelarDVNAdapterFeeLib.sol +48 -0
  90. package/contracts/uln/interfaces/adapters/ICCIPDVNAdapter.sol +30 -0
  91. package/contracts/uln/interfaces/adapters/ICCIPDVNAdapterFeeLib.sol +45 -0
  92. package/contracts/uln/libs/DVNOptions.sol +6 -6
  93. package/contracts/uln/libs/UlnOptions.sol +13 -13
  94. package/contracts/uln/uln301/AddressSizeConfig.sol +4 -4
  95. package/contracts/uln/uln301/ReceiveLibBaseE1.sol +4 -4
  96. package/contracts/uln/uln301/ReceiveUln301.sol +4 -41
  97. package/contracts/uln/uln301/ReceiveUln301View.sol +89 -0
  98. package/contracts/uln/uln301/SendLibBaseE1.sol +5 -5
  99. package/contracts/uln/uln301/SendUln301.sol +3 -3
  100. package/contracts/uln/uln301/TreasuryFeeHandler.sol +6 -6
  101. package/contracts/uln/uln301/interfaces/IMessageLibE1.sol +4 -4
  102. package/contracts/uln/uln302/ReceiveUln302.sol +4 -27
  103. package/contracts/uln/uln302/ReceiveUln302View.sol +89 -0
  104. package/contracts/uln/uln302/SendUln302.sol +3 -3
  105. package/contracts/upgradeable/WorkerUpgradeable.sol +3 -3
  106. package/package.json +7 -5
  107. package/artifacts/contracts/uln/dvn/adapters/DVNAdapterFeeLibBase.sol/DVNAdapterFeeLibBase.json +0 -50
  108. package/artifacts/contracts/uln/interfaces/IDVNAdapterFeeLib.sol/IDVNAdapterFeeLib.json +0 -50
  109. package/contracts/uln/dvn/adapters/DVNAdapterFeeLibBase.sol +0 -20
  110. package/contracts/uln/interfaces/IDVNAdapterFeeLib.sol +0 -13
@@ -5,16 +5,6 @@
5
5
  "abi": [
6
6
  {
7
7
  "inputs": [
8
- {
9
- "internalType": "address",
10
- "name": "_sendLib",
11
- "type": "address"
12
- },
13
- {
14
- "internalType": "address",
15
- "name": "_receiveLib",
16
- "type": "address"
17
- },
18
8
  {
19
9
  "internalType": "address[]",
20
10
  "name": "_admins",
@@ -22,18 +12,13 @@
22
12
  },
23
13
  {
24
14
  "internalType": "address",
25
- "name": "router",
15
+ "name": "_router",
26
16
  "type": "address"
27
17
  }
28
18
  ],
29
19
  "stateMutability": "nonpayable",
30
20
  "type": "constructor"
31
21
  },
32
- {
33
- "inputs": [],
34
- "name": "InvalidPayloadSize",
35
- "type": "error"
36
- },
37
22
  {
38
23
  "inputs": [
39
24
  {
@@ -42,17 +27,65 @@
42
27
  "type": "address"
43
28
  }
44
29
  ],
45
- "name": "InvalidRouter",
30
+ "name": "CCIPDVNAdapter_InvalidRouter",
31
+ "type": "error"
32
+ },
33
+ {
34
+ "inputs": [
35
+ {
36
+ "internalType": "uint64",
37
+ "name": "chainSelector",
38
+ "type": "uint64"
39
+ },
40
+ {
41
+ "internalType": "bytes",
42
+ "name": "peer",
43
+ "type": "bytes"
44
+ }
45
+ ],
46
+ "name": "CCIPDVNAdapter_UntrustedPeer",
47
+ "type": "error"
48
+ },
49
+ {
50
+ "inputs": [
51
+ {
52
+ "internalType": "uint256",
53
+ "name": "actual",
54
+ "type": "uint256"
55
+ },
56
+ {
57
+ "internalType": "uint256",
58
+ "name": "requested",
59
+ "type": "uint256"
60
+ }
61
+ ],
62
+ "name": "DVNAdapter_InsufficientBalance",
46
63
  "type": "error"
47
64
  },
48
65
  {
49
66
  "inputs": [],
50
- "name": "OnlySendLib",
67
+ "name": "DVNAdapter_InvalidMessageSize",
68
+ "type": "error"
69
+ },
70
+ {
71
+ "inputs": [
72
+ {
73
+ "internalType": "address",
74
+ "name": "sendLib",
75
+ "type": "address"
76
+ },
77
+ {
78
+ "internalType": "uint32",
79
+ "name": "dstEid",
80
+ "type": "uint32"
81
+ }
82
+ ],
83
+ "name": "DVNAdapter_MissingRecieveLib",
51
84
  "type": "error"
52
85
  },
53
86
  {
54
87
  "inputs": [],
55
- "name": "ToAddressIsZero",
88
+ "name": "DVNAdapter_NotImplemented",
56
89
  "type": "error"
57
90
  },
58
91
  {
@@ -68,50 +101,28 @@
68
101
  "type": "uint256"
69
102
  }
70
103
  ],
71
- "name": "TransferNativeFailed",
104
+ "name": "Transfer_NativeFailed",
72
105
  "type": "error"
73
106
  },
74
107
  {
75
108
  "inputs": [],
76
- "name": "Unauthorized",
109
+ "name": "Transfer_ToAddressIsZero",
77
110
  "type": "error"
78
111
  },
79
112
  {
80
113
  "inputs": [],
81
- "name": "VersionMismatch",
114
+ "name": "Worker_NotAllowed",
82
115
  "type": "error"
83
116
  },
84
117
  {
85
- "anonymous": false,
86
- "inputs": [
87
- {
88
- "indexed": true,
89
- "internalType": "address",
90
- "name": "admin",
91
- "type": "address"
92
- },
93
- {
94
- "indexed": false,
95
- "internalType": "bool",
96
- "name": "isAdmin",
97
- "type": "bool"
98
- }
99
- ],
100
- "name": "AdminSet",
101
- "type": "event"
118
+ "inputs": [],
119
+ "name": "Worker_OnlyMessageLib",
120
+ "type": "error"
102
121
  },
103
122
  {
104
- "anonymous": false,
105
- "inputs": [
106
- {
107
- "indexed": false,
108
- "internalType": "uint16",
109
- "name": "multiplierBps",
110
- "type": "uint16"
111
- }
112
- ],
113
- "name": "DefaultMultiplierSet",
114
- "type": "event"
123
+ "inputs": [],
124
+ "name": "Worker_RoleRenouncingDisabled",
125
+ "type": "error"
115
126
  },
116
127
  {
117
128
  "anonymous": false,
@@ -123,19 +134,19 @@
123
134
  "name": "dstEid",
124
135
  "type": "uint32"
125
136
  },
126
- {
127
- "internalType": "uint64",
128
- "name": "chainSelector",
129
- "type": "uint64"
130
- },
131
137
  {
132
138
  "internalType": "uint16",
133
139
  "name": "multiplierBps",
134
140
  "type": "uint16"
135
141
  },
142
+ {
143
+ "internalType": "uint64",
144
+ "name": "chainSelector",
145
+ "type": "uint64"
146
+ },
136
147
  {
137
148
  "internalType": "uint256",
138
- "name": "gasLimit",
149
+ "name": "gas",
139
150
  "type": "uint256"
140
151
  },
141
152
  {
@@ -145,7 +156,7 @@
145
156
  }
146
157
  ],
147
158
  "indexed": false,
148
- "internalType": "struct CCIPDVNAdapter.DstConfigParam[]",
159
+ "internalType": "struct ICCIPDVNAdapter.DstConfigParam[]",
149
160
  "name": "params",
150
161
  "type": "tuple[]"
151
162
  }
@@ -153,29 +164,47 @@
153
164
  "name": "DstConfigSet",
154
165
  "type": "event"
155
166
  },
167
+ {
168
+ "anonymous": false,
169
+ "inputs": [
170
+ {
171
+ "indexed": false,
172
+ "internalType": "address",
173
+ "name": "account",
174
+ "type": "address"
175
+ }
176
+ ],
177
+ "name": "Paused",
178
+ "type": "event"
179
+ },
156
180
  {
157
181
  "anonymous": false,
158
182
  "inputs": [
159
183
  {
160
184
  "components": [
185
+ {
186
+ "internalType": "address",
187
+ "name": "sendLib",
188
+ "type": "address"
189
+ },
161
190
  {
162
191
  "internalType": "uint32",
163
192
  "name": "dstEid",
164
193
  "type": "uint32"
165
194
  },
166
195
  {
167
- "internalType": "uint16",
168
- "name": "multiplierBps",
169
- "type": "uint16"
196
+ "internalType": "bytes32",
197
+ "name": "receiveLib",
198
+ "type": "bytes32"
170
199
  }
171
200
  ],
172
201
  "indexed": false,
173
- "internalType": "struct DVNAdapterBase.DstMultiplierParam[]",
202
+ "internalType": "struct ReceiveLibParam[]",
174
203
  "name": "params",
175
204
  "type": "tuple[]"
176
205
  }
177
206
  ],
178
- "name": "DstMultiplierSet",
207
+ "name": "ReceiveLibsSet",
179
208
  "type": "event"
180
209
  },
181
210
  {
@@ -183,110 +212,206 @@
183
212
  "inputs": [
184
213
  {
185
214
  "indexed": true,
186
- "internalType": "address",
187
- "name": "feeLib",
188
- "type": "address"
215
+ "internalType": "bytes32",
216
+ "name": "role",
217
+ "type": "bytes32"
218
+ },
219
+ {
220
+ "indexed": true,
221
+ "internalType": "bytes32",
222
+ "name": "previousAdminRole",
223
+ "type": "bytes32"
224
+ },
225
+ {
226
+ "indexed": true,
227
+ "internalType": "bytes32",
228
+ "name": "newAdminRole",
229
+ "type": "bytes32"
189
230
  }
190
231
  ],
191
- "name": "FeeLibSet",
232
+ "name": "RoleAdminChanged",
192
233
  "type": "event"
193
234
  },
194
235
  {
195
236
  "anonymous": false,
196
237
  "inputs": [
238
+ {
239
+ "indexed": true,
240
+ "internalType": "bytes32",
241
+ "name": "role",
242
+ "type": "bytes32"
243
+ },
197
244
  {
198
245
  "indexed": true,
199
246
  "internalType": "address",
200
- "name": "to",
247
+ "name": "account",
201
248
  "type": "address"
202
249
  },
203
250
  {
204
- "indexed": false,
205
- "internalType": "uint256",
206
- "name": "amount",
207
- "type": "uint256"
251
+ "indexed": true,
252
+ "internalType": "address",
253
+ "name": "sender",
254
+ "type": "address"
208
255
  }
209
256
  ],
210
- "name": "FeeWithdrawn",
257
+ "name": "RoleGranted",
211
258
  "type": "event"
212
259
  },
213
260
  {
214
261
  "anonymous": false,
215
262
  "inputs": [
263
+ {
264
+ "indexed": true,
265
+ "internalType": "bytes32",
266
+ "name": "role",
267
+ "type": "bytes32"
268
+ },
216
269
  {
217
270
  "indexed": true,
218
271
  "internalType": "address",
219
- "name": "previousOwner",
272
+ "name": "account",
220
273
  "type": "address"
221
274
  },
222
275
  {
223
276
  "indexed": true,
224
277
  "internalType": "address",
225
- "name": "newOwner",
278
+ "name": "sender",
226
279
  "type": "address"
227
280
  }
228
281
  ],
229
- "name": "OwnershipTransferred",
282
+ "name": "RoleRevoked",
230
283
  "type": "event"
231
284
  },
232
285
  {
233
286
  "anonymous": false,
234
287
  "inputs": [
235
288
  {
236
- "indexed": true,
289
+ "indexed": false,
237
290
  "internalType": "address",
238
- "name": "to",
291
+ "name": "router",
239
292
  "type": "address"
240
- },
293
+ }
294
+ ],
295
+ "name": "RouterSet",
296
+ "type": "event"
297
+ },
298
+ {
299
+ "anonymous": false,
300
+ "inputs": [
301
+ {
302
+ "indexed": false,
303
+ "internalType": "uint16",
304
+ "name": "multiplierBps",
305
+ "type": "uint16"
306
+ }
307
+ ],
308
+ "name": "SetDefaultMultiplierBps",
309
+ "type": "event"
310
+ },
311
+ {
312
+ "anonymous": false,
313
+ "inputs": [
241
314
  {
242
315
  "indexed": false,
243
316
  "internalType": "address",
244
- "name": "token",
317
+ "name": "priceFeed",
245
318
  "type": "address"
319
+ }
320
+ ],
321
+ "name": "SetPriceFeed",
322
+ "type": "event"
323
+ },
324
+ {
325
+ "anonymous": false,
326
+ "inputs": [
327
+ {
328
+ "indexed": false,
329
+ "internalType": "uint32",
330
+ "name": "dstEid",
331
+ "type": "uint32"
246
332
  },
247
333
  {
248
334
  "indexed": false,
249
- "internalType": "uint256",
250
- "name": "amount",
251
- "type": "uint256"
335
+ "internalType": "uint8[]",
336
+ "name": "optionTypes",
337
+ "type": "uint8[]"
252
338
  }
253
339
  ],
254
- "name": "TokenWithdrawn",
340
+ "name": "SetSupportedOptionTypes",
255
341
  "type": "event"
256
342
  },
257
343
  {
344
+ "anonymous": false,
258
345
  "inputs": [
259
346
  {
260
- "internalType": "uint64",
261
- "name": "chainSelector",
262
- "type": "uint64"
347
+ "indexed": false,
348
+ "internalType": "address",
349
+ "name": "workerLib",
350
+ "type": "address"
263
351
  }
264
352
  ],
265
- "name": "CCIPChainToEid",
266
- "outputs": [
353
+ "name": "SetWorkerLib",
354
+ "type": "event"
355
+ },
356
+ {
357
+ "anonymous": false,
358
+ "inputs": [
267
359
  {
268
- "internalType": "uint32",
269
- "name": "eid",
270
- "type": "uint32"
360
+ "indexed": false,
361
+ "internalType": "address",
362
+ "name": "account",
363
+ "type": "address"
271
364
  }
272
365
  ],
273
- "stateMutability": "view",
274
- "type": "function"
366
+ "name": "Unpaused",
367
+ "type": "event"
275
368
  },
276
369
  {
370
+ "anonymous": false,
277
371
  "inputs": [
278
372
  {
373
+ "indexed": false,
374
+ "internalType": "address",
375
+ "name": "lib",
376
+ "type": "address"
377
+ },
378
+ {
379
+ "indexed": false,
279
380
  "internalType": "address",
280
- "name": "admin",
381
+ "name": "to",
281
382
  "type": "address"
383
+ },
384
+ {
385
+ "indexed": false,
386
+ "internalType": "uint256",
387
+ "name": "amount",
388
+ "type": "uint256"
282
389
  }
283
390
  ],
284
- "name": "admins",
391
+ "name": "Withdraw",
392
+ "type": "event"
393
+ },
394
+ {
395
+ "inputs": [],
396
+ "name": "DEFAULT_ADMIN_ROLE",
285
397
  "outputs": [
286
398
  {
287
- "internalType": "bool",
399
+ "internalType": "bytes32",
288
400
  "name": "",
289
- "type": "bool"
401
+ "type": "bytes32"
402
+ }
403
+ ],
404
+ "stateMutability": "view",
405
+ "type": "function"
406
+ },
407
+ {
408
+ "inputs": [],
409
+ "name": "allowlistSize",
410
+ "outputs": [
411
+ {
412
+ "internalType": "uint64",
413
+ "name": "",
414
+ "type": "uint64"
290
415
  }
291
416
  ],
292
417
  "stateMutability": "view",
@@ -328,7 +453,7 @@
328
453
  },
329
454
  {
330
455
  "internalType": "bytes",
331
- "name": "",
456
+ "name": "_options",
332
457
  "type": "bytes"
333
458
  }
334
459
  ],
@@ -336,7 +461,7 @@
336
461
  "outputs": [
337
462
  {
338
463
  "internalType": "uint256",
339
- "name": "fee",
464
+ "name": "totalFee",
340
465
  "type": "uint256"
341
466
  }
342
467
  ],
@@ -386,7 +511,7 @@
386
511
  }
387
512
  ],
388
513
  "internalType": "struct Client.Any2EVMMessage",
389
- "name": "message",
514
+ "name": "_message",
390
515
  "type": "tuple"
391
516
  }
392
517
  ],
@@ -428,28 +553,15 @@
428
553
  "name": "multiplierBps",
429
554
  "type": "uint16"
430
555
  },
431
- {
432
- "internalType": "uint256",
433
- "name": "gasLimit",
434
- "type": "uint256"
435
- },
436
556
  {
437
557
  "internalType": "bytes",
438
558
  "name": "peer",
439
559
  "type": "bytes"
440
- }
441
- ],
442
- "stateMutability": "view",
443
- "type": "function"
444
- },
445
- {
446
- "inputs": [],
447
- "name": "feeLib",
448
- "outputs": [
560
+ },
449
561
  {
450
- "internalType": "contract IDVNAdapterFeeLib",
451
- "name": "",
452
- "type": "address"
562
+ "internalType": "uint256",
563
+ "name": "gas",
564
+ "type": "uint256"
453
565
  }
454
566
  ],
455
567
  "stateMutability": "view",
@@ -464,7 +576,7 @@
464
576
  },
465
577
  {
466
578
  "internalType": "uint64",
467
- "name": "",
579
+ "name": "_confirmations",
468
580
  "type": "uint64"
469
581
  },
470
582
  {
@@ -474,7 +586,7 @@
474
586
  },
475
587
  {
476
588
  "internalType": "bytes",
477
- "name": "",
589
+ "name": "_options",
478
590
  "type": "bytes"
479
591
  }
480
592
  ],
@@ -482,7 +594,7 @@
482
594
  "outputs": [
483
595
  {
484
596
  "internalType": "uint256",
485
- "name": "fee",
597
+ "name": "totalFee",
486
598
  "type": "uint256"
487
599
  }
488
600
  ],
@@ -490,57 +602,142 @@
490
602
  "type": "function"
491
603
  },
492
604
  {
493
- "inputs": [],
494
- "name": "getRouter",
605
+ "inputs": [
606
+ {
607
+ "internalType": "bytes32",
608
+ "name": "role",
609
+ "type": "bytes32"
610
+ }
611
+ ],
612
+ "name": "getRoleAdmin",
495
613
  "outputs": [
496
614
  {
497
- "internalType": "address",
615
+ "internalType": "bytes32",
498
616
  "name": "",
499
- "type": "address"
617
+ "type": "bytes32"
500
618
  }
501
619
  ],
502
620
  "stateMutability": "view",
503
621
  "type": "function"
504
622
  },
505
623
  {
506
- "inputs": [],
507
- "name": "owner",
624
+ "inputs": [
625
+ {
626
+ "internalType": "uint32",
627
+ "name": "_eid",
628
+ "type": "uint32"
629
+ }
630
+ ],
631
+ "name": "getSupportedOptionTypes",
508
632
  "outputs": [
633
+ {
634
+ "internalType": "uint8[]",
635
+ "name": "",
636
+ "type": "uint8[]"
637
+ }
638
+ ],
639
+ "stateMutability": "view",
640
+ "type": "function"
641
+ },
642
+ {
643
+ "inputs": [
644
+ {
645
+ "internalType": "bytes32",
646
+ "name": "role",
647
+ "type": "bytes32"
648
+ },
509
649
  {
510
650
  "internalType": "address",
651
+ "name": "account",
652
+ "type": "address"
653
+ }
654
+ ],
655
+ "name": "grantRole",
656
+ "outputs": [],
657
+ "stateMutability": "nonpayable",
658
+ "type": "function"
659
+ },
660
+ {
661
+ "inputs": [
662
+ {
663
+ "internalType": "address",
664
+ "name": "_sender",
665
+ "type": "address"
666
+ }
667
+ ],
668
+ "name": "hasAcl",
669
+ "outputs": [
670
+ {
671
+ "internalType": "bool",
511
672
  "name": "",
673
+ "type": "bool"
674
+ }
675
+ ],
676
+ "stateMutability": "view",
677
+ "type": "function"
678
+ },
679
+ {
680
+ "inputs": [
681
+ {
682
+ "internalType": "bytes32",
683
+ "name": "role",
684
+ "type": "bytes32"
685
+ },
686
+ {
687
+ "internalType": "address",
688
+ "name": "account",
512
689
  "type": "address"
513
690
  }
514
691
  ],
692
+ "name": "hasRole",
693
+ "outputs": [
694
+ {
695
+ "internalType": "bool",
696
+ "name": "",
697
+ "type": "bool"
698
+ }
699
+ ],
515
700
  "stateMutability": "view",
516
701
  "type": "function"
517
702
  },
518
703
  {
519
704
  "inputs": [],
520
- "name": "receiveLib",
705
+ "name": "paused",
521
706
  "outputs": [
522
707
  {
523
- "internalType": "contract IReceiveUlnE2",
708
+ "internalType": "bool",
524
709
  "name": "",
525
- "type": "address"
710
+ "type": "bool"
526
711
  }
527
712
  ],
528
713
  "stateMutability": "view",
529
714
  "type": "function"
530
715
  },
531
716
  {
532
- "inputs": [],
533
- "name": "renounceOwnership",
534
- "outputs": [],
535
- "stateMutability": "nonpayable",
717
+ "inputs": [
718
+ {
719
+ "internalType": "uint64",
720
+ "name": "chainSelector",
721
+ "type": "uint64"
722
+ }
723
+ ],
724
+ "name": "peers",
725
+ "outputs": [
726
+ {
727
+ "internalType": "bytes",
728
+ "name": "peer",
729
+ "type": "bytes"
730
+ }
731
+ ],
732
+ "stateMutability": "view",
536
733
  "type": "function"
537
734
  },
538
735
  {
539
736
  "inputs": [],
540
- "name": "sendLib",
737
+ "name": "priceFeed",
541
738
  "outputs": [
542
739
  {
543
- "internalType": "contract ISendLib",
740
+ "internalType": "address",
544
741
  "name": "",
545
742
  "type": "address"
546
743
  }
@@ -552,29 +749,84 @@
552
749
  "inputs": [
553
750
  {
554
751
  "internalType": "address",
555
- "name": "_admin",
752
+ "name": "sendLib",
556
753
  "type": "address"
557
754
  },
558
755
  {
559
- "internalType": "bool",
560
- "name": "_isAdmin",
561
- "type": "bool"
756
+ "internalType": "uint32",
757
+ "name": "dstEid",
758
+ "type": "uint32"
562
759
  }
563
760
  ],
564
- "name": "setAdmin",
761
+ "name": "receiveLibs",
762
+ "outputs": [
763
+ {
764
+ "internalType": "bytes32",
765
+ "name": "receiveLib",
766
+ "type": "bytes32"
767
+ }
768
+ ],
769
+ "stateMutability": "view",
770
+ "type": "function"
771
+ },
772
+ {
773
+ "inputs": [
774
+ {
775
+ "internalType": "bytes32",
776
+ "name": "",
777
+ "type": "bytes32"
778
+ },
779
+ {
780
+ "internalType": "address",
781
+ "name": "",
782
+ "type": "address"
783
+ }
784
+ ],
785
+ "name": "renounceRole",
786
+ "outputs": [],
787
+ "stateMutability": "pure",
788
+ "type": "function"
789
+ },
790
+ {
791
+ "inputs": [
792
+ {
793
+ "internalType": "bytes32",
794
+ "name": "role",
795
+ "type": "bytes32"
796
+ },
797
+ {
798
+ "internalType": "address",
799
+ "name": "account",
800
+ "type": "address"
801
+ }
802
+ ],
803
+ "name": "revokeRole",
565
804
  "outputs": [],
566
805
  "stateMutability": "nonpayable",
567
806
  "type": "function"
568
807
  },
808
+ {
809
+ "inputs": [],
810
+ "name": "router",
811
+ "outputs": [
812
+ {
813
+ "internalType": "contract IRouterClient",
814
+ "name": "",
815
+ "type": "address"
816
+ }
817
+ ],
818
+ "stateMutability": "view",
819
+ "type": "function"
820
+ },
569
821
  {
570
822
  "inputs": [
571
823
  {
572
824
  "internalType": "uint16",
573
- "name": "_defaultMultiplierBps",
825
+ "name": "_multiplierBps",
574
826
  "type": "uint16"
575
827
  }
576
828
  ],
577
- "name": "setDefaultMultiplier",
829
+ "name": "setDefaultMultiplierBps",
578
830
  "outputs": [],
579
831
  "stateMutability": "nonpayable",
580
832
  "type": "function"
@@ -588,19 +840,19 @@
588
840
  "name": "dstEid",
589
841
  "type": "uint32"
590
842
  },
591
- {
592
- "internalType": "uint64",
593
- "name": "chainSelector",
594
- "type": "uint64"
595
- },
596
843
  {
597
844
  "internalType": "uint16",
598
845
  "name": "multiplierBps",
599
846
  "type": "uint16"
600
847
  },
848
+ {
849
+ "internalType": "uint64",
850
+ "name": "chainSelector",
851
+ "type": "uint64"
852
+ },
601
853
  {
602
854
  "internalType": "uint256",
603
- "name": "gasLimit",
855
+ "name": "gas",
604
856
  "type": "uint256"
605
857
  },
606
858
  {
@@ -609,7 +861,7 @@
609
861
  "type": "bytes"
610
862
  }
611
863
  ],
612
- "internalType": "struct CCIPDVNAdapter.DstConfigParam[]",
864
+ "internalType": "struct ICCIPDVNAdapter.DstConfigParam[]",
613
865
  "name": "_params",
614
866
  "type": "tuple[]"
615
867
  }
@@ -619,27 +871,89 @@
619
871
  "stateMutability": "nonpayable",
620
872
  "type": "function"
621
873
  },
874
+ {
875
+ "inputs": [
876
+ {
877
+ "internalType": "bool",
878
+ "name": "_paused",
879
+ "type": "bool"
880
+ }
881
+ ],
882
+ "name": "setPaused",
883
+ "outputs": [],
884
+ "stateMutability": "nonpayable",
885
+ "type": "function"
886
+ },
887
+ {
888
+ "inputs": [
889
+ {
890
+ "internalType": "address",
891
+ "name": "_priceFeed",
892
+ "type": "address"
893
+ }
894
+ ],
895
+ "name": "setPriceFeed",
896
+ "outputs": [],
897
+ "stateMutability": "nonpayable",
898
+ "type": "function"
899
+ },
622
900
  {
623
901
  "inputs": [
624
902
  {
625
903
  "components": [
904
+ {
905
+ "internalType": "address",
906
+ "name": "sendLib",
907
+ "type": "address"
908
+ },
626
909
  {
627
910
  "internalType": "uint32",
628
911
  "name": "dstEid",
629
912
  "type": "uint32"
630
913
  },
631
914
  {
632
- "internalType": "uint16",
633
- "name": "multiplierBps",
634
- "type": "uint16"
915
+ "internalType": "bytes32",
916
+ "name": "receiveLib",
917
+ "type": "bytes32"
635
918
  }
636
919
  ],
637
- "internalType": "struct DVNAdapterBase.DstMultiplierParam[]",
920
+ "internalType": "struct ReceiveLibParam[]",
638
921
  "name": "_params",
639
922
  "type": "tuple[]"
640
923
  }
641
924
  ],
642
- "name": "setDstMultiplier",
925
+ "name": "setReceiveLibs",
926
+ "outputs": [],
927
+ "stateMutability": "nonpayable",
928
+ "type": "function"
929
+ },
930
+ {
931
+ "inputs": [
932
+ {
933
+ "internalType": "address",
934
+ "name": "_router",
935
+ "type": "address"
936
+ }
937
+ ],
938
+ "name": "setRouter",
939
+ "outputs": [],
940
+ "stateMutability": "nonpayable",
941
+ "type": "function"
942
+ },
943
+ {
944
+ "inputs": [
945
+ {
946
+ "internalType": "uint32",
947
+ "name": "_eid",
948
+ "type": "uint32"
949
+ },
950
+ {
951
+ "internalType": "uint8[]",
952
+ "name": "_optionTypes",
953
+ "type": "uint8[]"
954
+ }
955
+ ],
956
+ "name": "setSupportedOptionTypes",
643
957
  "outputs": [],
644
958
  "stateMutability": "nonpayable",
645
959
  "type": "function"
@@ -648,11 +962,11 @@
648
962
  "inputs": [
649
963
  {
650
964
  "internalType": "address",
651
- "name": "_feeLib",
965
+ "name": "_workerFeeLib",
652
966
  "type": "address"
653
967
  }
654
968
  ],
655
- "name": "setFeeLib",
969
+ "name": "setWorkerFeeLib",
656
970
  "outputs": [],
657
971
  "stateMutability": "nonpayable",
658
972
  "type": "function"
@@ -673,24 +987,16 @@
673
987
  "type": "bool"
674
988
  }
675
989
  ],
676
- "stateMutability": "pure",
990
+ "stateMutability": "view",
677
991
  "type": "function"
678
992
  },
679
993
  {
680
994
  "inputs": [
681
995
  {
682
996
  "internalType": "address",
683
- "name": "newOwner",
997
+ "name": "_lib",
684
998
  "type": "address"
685
- }
686
- ],
687
- "name": "transferOwnership",
688
- "outputs": [],
689
- "stateMutability": "nonpayable",
690
- "type": "function"
691
- },
692
- {
693
- "inputs": [
999
+ },
694
1000
  {
695
1001
  "internalType": "address",
696
1002
  "name": "_to",
@@ -730,13 +1036,26 @@
730
1036
  "stateMutability": "nonpayable",
731
1037
  "type": "function"
732
1038
  },
1039
+ {
1040
+ "inputs": [],
1041
+ "name": "workerFeeLib",
1042
+ "outputs": [
1043
+ {
1044
+ "internalType": "address",
1045
+ "name": "",
1046
+ "type": "address"
1047
+ }
1048
+ ],
1049
+ "stateMutability": "view",
1050
+ "type": "function"
1051
+ },
733
1052
  {
734
1053
  "stateMutability": "payable",
735
1054
  "type": "receive"
736
1055
  }
737
1056
  ],
738
- "bytecode": "0x60e06040526001805461ffff60a01b191661027160a41b1790553480156200002657600080fd5b506040516200361338038062003613833981016040819052620000499162000349565b838383836001600160a01b0381166200007c576040516335fdcccd60e21b81526000600482015260240160405180910390fd5b6001600160a01b03166080526200009333620002c6565b6000806000856001600160a01b03166354fd4d506040518163ffffffff1660e01b8152600401606060405180830381865afa158015620000d7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000fd919062000468565b9250925092506000806000876001600160a01b03166354fd4d506040518163ffffffff1660e01b8152600401606060405180830381865afa15801562000147573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200016d919062000468565b925092509250826001600160401b0316866001600160401b03161415806200019b57508160ff168560ff1614155b80620001ad57508060ff168460ff1614155b15620001cc5760405163714f551360e01b815260040160405180910390fd5b6001600160a01b03808a1660a052881660c05260005b8751811015620002b2576001600260008a8481518110620002075762000207620004bf565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff0219169083151502179055508781815181106200025b576200025b620004bf565b60200260200101516001600160a01b03167fe68d2c359a771606c400cf8b87000cf5864010363d6a736e98f5047b7bbe18e96001604051620002a1911515815260200190565b60405180910390a2600101620001e2565b5050505050505050505050505050620004d5565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b03811681146200032e57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600080600080608085870312156200036057600080fd5b6200036b8562000316565b935060206200037c81870162000316565b60408701519094506001600160401b03808211156200039a57600080fd5b818801915088601f830112620003af57600080fd5b815181811115620003c457620003c462000333565b8060051b604051601f19603f83011681018181108582111715620003ec57620003ec62000333565b60405291825284820192508381018501918b8311156200040b57600080fd5b938501935b828510156200043457620004248562000316565b8452938501939285019262000410565b8097505050505050506200044b6060860162000316565b905092959194509250565b805160ff811681146200032e57600080fd5b6000806000606084860312156200047e57600080fd5b83516001600160401b03811681146200049657600080fd5b9250620004a66020850162000456565b9150620004b66040850162000456565b90509250925092565b634e487b7160e01b600052603260045260246000fd5b60805160a05160c0516130e46200052f600039600081816104690152611c040152600081816103d501528181610ba3015261186701526000818161040601528181610b1701528181610db0015261167001526130e46000f3fe6080604052600436106101785760003560e01c806395d376d7116100cb578063bb37d00c1161007f578063f2fde38b11610059578063f2fde38b146104ab578063f5ec0d28146104cb578063fd9be5221461051357600080fd5b8063bb37d00c1461042a578063bd3ed5ff14610457578063ed9460241461048b57600080fd5b80639ec84c0a116100b05780639ec84c0a146103a3578063a0706d90146103c3578063b0f479a1146103f757600080fd5b806395d376d7146103605780639e9449651461037357600080fd5b8063429b62e51161012d57806381d981af1161010757806381d981af146102d457806385572ffb146102f45780638da5cb5b1461031457600080fd5b8063429b62e51461026f5780634b0bddd21461029f578063715018a6146102bf57600080fd5b806301ffc9a71161015e57806301ffc9a7146101f157806320ac2ece1461022157806330bb3aac1461024157600080fd5b8062bf2e801461018457806301e33667146101cf57600080fd5b3661017f57005b600080fd5b34801561019057600080fd5b506001546101b79074010000000000000000000000000000000000000000900461ffff1681565b60405161ffff90911681526020015b60405180910390f35b3480156101db57600080fd5b506101ef6101ea3660046122c2565b610533565b005b3480156101fd57600080fd5b5061021161020c3660046122fe565b6105df565b60405190151581526020016101c6565b34801561022d57600080fd5b506101ef61023c366004612340565b610678565b34801561024d57600080fd5b5061026161025c3660046123d0565b610730565b6040519081526020016101c6565b34801561027b57600080fd5b5061021161028a366004612340565b60026020526000908152604090205460ff1681565b3480156102ab57600080fd5b506101ef6102ba366004612454565b61092a565b3480156102cb57600080fd5b506101ef6109bd565b3480156102e057600080fd5b506101ef6102ef36600461248b565b6109d1565b34801561030057600080fd5b506101ef61030f366004612518565b610aff565b34801561032057600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101c6565b61026161036e36600461254d565b610b89565b34801561037f57600080fd5b5061039361038e3660046125b6565b610f62565b6040516101c6949392919061263f565b3480156103af57600080fd5b506101ef6103be36600461267c565b611029565b3480156103cf57600080fd5b5061033b7f000000000000000000000000000000000000000000000000000000000000000081565b34801561040357600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061033b565b34801561043657600080fd5b5060015461033b9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561046357600080fd5b5061033b7f000000000000000000000000000000000000000000000000000000000000000081565b34801561049757600080fd5b506101ef6104a63660046126f1565b6112de565b3480156104b757600080fd5b506101ef6104c6366004612340565b6113a8565b3480156104d757600080fd5b506104fe6104e636600461270c565b60046020526000908152604090205463ffffffff1681565b60405163ffffffff90911681526020016101c6565b34801561051f57600080fd5b506101ef61052e366004612727565b61145c565b3360009081526002602052604090205460ff1661057c576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105878383836114b3565b6040805173ffffffffffffffffffffffffffffffffffffffff8581168252602082018490528416917f8210728e7c071f615b840ee026032693858fbcd5e5359e67e438c890f59e5620910160405180910390a2505050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f85572ffb00000000000000000000000000000000000000000000000000000000148061067257507fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a700000000000000000000000000000000000000000000000000000000145b92915050565b3360009081526002602052604090205460ff166106c1576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517f47f3fc2afa14fc8d55a57ed53e2a26b8e63d5f95adb4869b2da2bffdd38c63d290600090a250565b63ffffffff8516600090815260036020526040808220815160518082526080820190935290918391610803916020820181803683375050506002840180546000919061077b90612780565b80601f01602080910402602001604051908101604052809291908181526020018280546107a790612780565b80156107f45780601f106107c9576101008083540402835291602001916107f4565b820191906000526020600020905b8154815290600101906020018083116107d757829003601f168201915b505050505085600101546114e8565b825490915061081c9067ffffffffffffffff1682611630565b60015490935073ffffffffffffffffffffffffffffffffffffffff161561091f5760015482546040517f212cf54f00000000000000000000000000000000000000000000000000000000815263ffffffff8b16600482015273ffffffffffffffffffffffffffffffffffffffff898116602483015261ffff740100000000000000000000000000000000000000008504811660448401526801000000000000000090930490921660648201526084810186905291169063212cf54f9060a401602060405180830381865afa1580156108f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061091c91906127cd565b92505b505095945050505050565b6109326116ef565b73ffffffffffffffffffffffffffffffffffffffff821660008181526002602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001685151590811790915591519182527fe68d2c359a771606c400cf8b87000cf5864010363d6a736e98f5047b7bbe18e991015b60405180910390a25050565b6109c56116ef565b6109cf6000611770565b565b3360009081526002602052604090205460ff16610a1a576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610ac15736838383818110610a3857610a386127e6565b9050604002019050806020016020810190610a5391906126f1565b60036000610a6460208501856125b6565b63ffffffff1681526020810191909152604001600020805461ffff9290921668010000000000000000027fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff90921691909117905550600101610a1d565b507f69abe4111cf43d39e68d4c540ca52a855f900939e08d7f27a07a068ea5c060558282604051610af3929190612815565b60405180910390a15050565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610b75576040517fd7f733340000000000000000000000000000000000000000000000000000000081523360048201526024015b60405180910390fd5b610b86610b8182612a48565b6117e5565b50565b60003373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610bfa576040517f3885d60300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600381610c0c60208801886125b6565b63ffffffff16815260208082019290925260409081016000208151608081018352815467ffffffffffffffff8116825268010000000000000000900461ffff1693810193909352600181015491830191909152600281018054606084019190610c7490612780565b80601f0160208091040260200160405190810160405280929190818152602001828054610ca090612780565b8015610ced5780601f10610cc257610100808354040283529160200191610ced565b820191906000526020600020905b815481529060010190602001808311610cd057829003601f168201915b50505050508152505090506000610d56868060200190610d0d9190612af5565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050506060850151604086810151908b013592506114e8565b9050610d66826000015182611630565b9250610d7183611804565b81516040517f96f4e9f900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016916396f4e9f9918691610de7918690600401612b5a565b60206040518083038185885af1158015610e05573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610e2a91906127cd565b5060015473ffffffffffffffffffffffffffffffffffffffff1615610f595760015473ffffffffffffffffffffffffffffffffffffffff1663212cf54f610e7460208901896125b6565b610e8460a08a0160808b01612340565b600154602087015160405160e086901b7fffffffff0000000000000000000000000000000000000000000000000000000016815263ffffffff909416600485015273ffffffffffffffffffffffffffffffffffffffff909216602484015274010000000000000000000000000000000000000000900461ffff90811660448401521660648201526084810186905260a401602060405180830381865afa158015610f32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f5691906127cd565b92505b50509392505050565b60036020526000908152604090208054600182015460028301805467ffffffffffffffff8416946801000000000000000090940461ffff16939190610fa690612780565b80601f0160208091040260200160405190810160405280929190818152602001828054610fd290612780565b801561101f5780601f10610ff45761010080835404028352916020019161101f565b820191906000526020600020905b81548152906001019060200180831161100257829003601f168201915b5050505050905084565b3360009081526002602052604090205460ff16611072576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156112ac5736838383818110611090576110906127e6565b90506020028101906110a29190612c6f565b9050600460006003816110b860208601866125b6565b63ffffffff168152602080820192909252604090810160009081205467ffffffffffffffff168452838301949094529190910190912080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000169055611120908201826125b6565b60046000611134604085016020860161270c565b67ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002060006101000a81548163ffffffff021916908363ffffffff1602179055506040518060800160405280826020016020810190611192919061270c565b67ffffffffffffffff1681526020016111b160608401604085016126f1565b61ffff168152606083013560208201526040016111d16080840184612af5565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250939094525060039250611219905060208501856125b6565b63ffffffff1681526020808201929092526040908101600020835181549385015161ffff1668010000000000000000027fffffffffffffffffffffffffffffffffffffffffffff0000000000000000000090941667ffffffffffffffff9091161792909217825582015160018201556060820151600282019061129c9082612cfd565b5050600190920191506110759050565b507f5c257885b187e43434c98dff62b27d2799de2d31908ae78c56d824a8ec2bdb528282604051610af3929190612e60565b3360009081526002602052604090205460ff16611327576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000061ffff8416908102919091179091556040519081527f5cd03093b446ef387fae919d09687fb7200930dc43240f391a08f7f3a8243e619060200160405180910390a150565b6113b06116ef565b73ffffffffffffffffffffffffffffffffffffffff8116611453576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610b6c565b610b8681611770565b3360009081526002602052604090205460ff166114a5576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114af828261181b565b5050565b73ffffffffffffffffffffffffffffffffffffffff83166114dd576114d8828261190b565b505050565b6114d8838383611a11565b6115306040518060a00160405280606081526020016060815260200160608152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001606081525090565b6040518060a0016040528084815260200161154b8787611a7f565b8152602001600060405190808252806020026020018201604052801561159757816020015b60408051808201909152600080825260208201528152602001906001900390816115705790505b50815260006020808301829052604080518082018252878152820192835280516024810188905292511515604480850191909152815180850390910181526064909301815290820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f97a657c9000000000000000000000000000000000000000000000000000000001790529091015295945050505050565b6040517f20487ded00000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906320487ded906116a79086908690600401612b5a565b602060405180830381865afa1580156116c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116e891906127cd565b9392505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146109cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b6c565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6117f781602001518260400151611aab565b610b868160600151611bb6565b47818110156114af576114af3061181b8385612ff1565b6040517ffd9be52200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152602482018390527f0000000000000000000000000000000000000000000000000000000000000000169063fd9be52290604401600060405180830381600087803b1580156118ab57600080fd5b505af11580156118bf573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff167f78473f3f373f7673597f4f0fa5873cb4d375fea6d4339ad6b56dbd411513cb3f826040516109b191815260200190565b73ffffffffffffffffffffffffffffffffffffffff8216611958576040517f32fa6a1d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d80600081146119b2576040519150601f19603f3d011682016040523d82523d6000602084013e6119b7565b606091505b50509050806114d8576040517f2c024f9200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101839052604401610b6c565b73ffffffffffffffffffffffffffffffffffffffff8216611a5e576040517f32fa6a1d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114d873ffffffffffffffffffffffffffffffffffffffff84168383611c7c565b60608282604051602001611a94929190613004565b604051602081830303815290604052905092915050565b67ffffffffffffffff821660009081526004602090815260408083205463ffffffff16808452600390925282206002018054919291611ae990612780565b80601f0160208091040260200160405190810160405280929190818152602001828054611b1590612780565b8015611b625780601f10611b3757610100808354040283529160200191611b62565b820191906000526020600020905b815481529060010190602001808311611b4557829003601f168201915b505050505090508080519060200120838051906020012014611bb0576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b600080611bc283611d09565b6040517f0223536e000000000000000000000000000000000000000000000000000000008152919350915073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690630223536e90611c45908590859067ffffffffffffffff90600401613026565b600060405180830381600087803b158015611c5f57600080fd5b505af1158015611c73573d6000803e3d6000fd5b50505050505050565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526114d8908490611d81565b60606000611d1960206051613059565b835114611d52576040517ffbdf795400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611d6084826051611e90565b9250611d6d605182613059565b9050611d79848261200a565b915050915091565b6000611de3826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661208a9092919063ffffffff16565b9050805160001480611e04575080806020019051810190611e04919061306c565b6114d8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610b6c565b606081611e9e81601f613059565b1015611f06576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610b6c565b611f108284613059565b84511015611f7a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e64730000000000000000000000000000006044820152606401610b6c565b606082158015611f995760405191506000825260208201604052612001565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015611fd2578051835260209283019201611fba565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b6000612017826020613059565b83511015612081576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f746f427974657333325f6f75744f66426f756e647300000000000000000000006044820152606401610b6c565b50016020015190565b606061209984846000856120a1565b949350505050565b606082471015612133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610b6c565b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405161215c9190613089565b60006040518083038185875af1925050503d8060008114612199576040519150601f19603f3d011682016040523d82523d6000602084013e61219e565b606091505b50915091506121af878383876121ba565b979650505050505050565b606083156122505782516000036122495773ffffffffffffffffffffffffffffffffffffffff85163b612249576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610b6c565b5081612099565b61209983838151156122655781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6c919061309b565b803573ffffffffffffffffffffffffffffffffffffffff811681146122bd57600080fd5b919050565b6000806000606084860312156122d757600080fd5b6122e084612299565b92506122ee60208501612299565b9150604084013590509250925092565b60006020828403121561231057600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146116e857600080fd5b60006020828403121561235257600080fd5b6116e882612299565b803563ffffffff811681146122bd57600080fd5b803567ffffffffffffffff811681146122bd57600080fd5b60008083601f84011261239957600080fd5b50813567ffffffffffffffff8111156123b157600080fd5b6020830191508360208285010111156123c957600080fd5b9250929050565b6000806000806000608086880312156123e857600080fd5b6123f18661235b565b94506123ff6020870161236f565b935061240d60408701612299565b9250606086013567ffffffffffffffff81111561242957600080fd5b61243588828901612387565b969995985093965092949392505050565b8015158114610b8657600080fd5b6000806040838503121561246757600080fd5b61247083612299565b9150602083013561248081612446565b809150509250929050565b6000806020838503121561249e57600080fd5b823567ffffffffffffffff808211156124b657600080fd5b818501915085601f8301126124ca57600080fd5b8135818111156124d957600080fd5b8660208260061b85010111156124ee57600080fd5b60209290920196919550909350505050565b600060a0828403121561251257600080fd5b50919050565b60006020828403121561252a57600080fd5b813567ffffffffffffffff81111561254157600080fd5b61209984828501612500565b60008060006040848603121561256257600080fd5b833567ffffffffffffffff8082111561257a57600080fd5b61258687838801612500565b9450602086013591508082111561259c57600080fd5b506125a986828701612387565b9497909650939450505050565b6000602082840312156125c857600080fd5b6116e88261235b565b60005b838110156125ec5781810151838201526020016125d4565b50506000910152565b6000815180845261260d8160208601602086016125d1565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b67ffffffffffffffff8516815261ffff8416602082015282604082015260806060820152600061267260808301846125f5565b9695505050505050565b6000806020838503121561268f57600080fd5b823567ffffffffffffffff808211156126a757600080fd5b818501915085601f8301126126bb57600080fd5b8135818111156126ca57600080fd5b8660208260051b85010111156124ee57600080fd5b803561ffff811681146122bd57600080fd5b60006020828403121561270357600080fd5b6116e8826126df565b60006020828403121561271e57600080fd5b6116e88261236f565b6000806040838503121561273a57600080fd5b61274383612299565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600181811c9082168061279457607f821691505b602082108103612512577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000602082840312156127df57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020808252818101839052600090604080840186845b878110156128675763ffffffff6128418361235b565b16835261ffff6128528684016126df565b1683860152918301919083019060010161282b565b5090979650505050505050565b6040805190810167ffffffffffffffff8111828210171561289757612897612751565b60405290565b60405160a0810167ffffffffffffffff8111828210171561289757612897612751565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561290757612907612751565b604052919050565b600082601f83011261292057600080fd5b813567ffffffffffffffff81111561293a5761293a612751565b61296b60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016128c0565b81815284602083860101111561298057600080fd5b816020850160208301376000918101602001919091529392505050565b600082601f8301126129ae57600080fd5b8135602067ffffffffffffffff8211156129ca576129ca612751565b6129d8818360051b016128c0565b82815260069290921b840181019181810190868411156129f757600080fd5b8286015b84811015612a3d5760408189031215612a145760008081fd5b612a1c612874565b612a2582612299565b815281850135858201528352918301916040016129fb565b509695505050505050565b600060a08236031215612a5a57600080fd5b612a6261289d565b82358152612a726020840161236f565b6020820152604083013567ffffffffffffffff80821115612a9257600080fd5b612a9e3683870161290f565b60408401526060850135915080821115612ab757600080fd5b612ac33683870161290f565b60608401526080850135915080821115612adc57600080fd5b50612ae93682860161299d565b60808301525092915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112612b2a57600080fd5b83018035915067ffffffffffffffff821115612b4557600080fd5b6020019150368190038213156123c957600080fd5b6000604067ffffffffffffffff851683526020604081850152845160a06040860152612b8960e08601826125f5565b9050818601517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc080878403016060880152612bc483836125f5565b6040890151888203830160808a01528051808352908601945060009350908501905b80841015612c25578451805173ffffffffffffffffffffffffffffffffffffffff16835286015186830152938501936001939093019290860190612be6565b50606089015173ffffffffffffffffffffffffffffffffffffffff1660a08901526080890151888203830160c08a01529550612c6181876125f5565b9a9950505050505050505050565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61833603018112612ca357600080fd5b9190910192915050565b601f8211156114d8576000816000526020600020601f850160051c81016020861015612cd65750805b601f850160051c820191505b81811015612cf557828155600101612ce2565b505050505050565b815167ffffffffffffffff811115612d1757612d17612751565b612d2b81612d258454612780565b84612cad565b602080601f831160018114612d7e5760008415612d485750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555612cf5565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b82811015612dcb57888601518255948401946001909101908401612dac565b5085821015612e0757878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60208082528181018390526000906040808401600586901b8501820187855b88811015612fb4577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc088840301845281357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff618b3603018112612ee057600080fd5b8a0160a063ffffffff612ef28361235b565b168552612f0088830161236f565b67ffffffffffffffff8082168a88015261ffff612f1e8a86016126df565b16878a0152606084810135908801526080915081840135368590037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1018112612f6657600080fd5b90930189810193903581811115612f7c57600080fd5b803603851315612f8b57600080fd5b8383890152612f9d8489018287612e17565b988b01989750505093880193505050600101612e7f565b509098975050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561067257610672612fc2565b600083516130168184602088016125d1565b9190910191825250602001919050565b60608152600061303960608301866125f5565b905083602083015267ffffffffffffffff83166040830152949350505050565b8082018082111561067257610672612fc2565b60006020828403121561307e57600080fd5b81516116e881612446565b60008251612ca38184602087016125d1565b6020815260006116e860208301846125f556fea2646970667358221220575a1e69444cf006aede7fde3ae21bf817d03b9e17176dea715e52060ec5ca3064736f6c63430008160033",
739
- "deployedBytecode": "0x6080604052600436106101785760003560e01c806395d376d7116100cb578063bb37d00c1161007f578063f2fde38b11610059578063f2fde38b146104ab578063f5ec0d28146104cb578063fd9be5221461051357600080fd5b8063bb37d00c1461042a578063bd3ed5ff14610457578063ed9460241461048b57600080fd5b80639ec84c0a116100b05780639ec84c0a146103a3578063a0706d90146103c3578063b0f479a1146103f757600080fd5b806395d376d7146103605780639e9449651461037357600080fd5b8063429b62e51161012d57806381d981af1161010757806381d981af146102d457806385572ffb146102f45780638da5cb5b1461031457600080fd5b8063429b62e51461026f5780634b0bddd21461029f578063715018a6146102bf57600080fd5b806301ffc9a71161015e57806301ffc9a7146101f157806320ac2ece1461022157806330bb3aac1461024157600080fd5b8062bf2e801461018457806301e33667146101cf57600080fd5b3661017f57005b600080fd5b34801561019057600080fd5b506001546101b79074010000000000000000000000000000000000000000900461ffff1681565b60405161ffff90911681526020015b60405180910390f35b3480156101db57600080fd5b506101ef6101ea3660046122c2565b610533565b005b3480156101fd57600080fd5b5061021161020c3660046122fe565b6105df565b60405190151581526020016101c6565b34801561022d57600080fd5b506101ef61023c366004612340565b610678565b34801561024d57600080fd5b5061026161025c3660046123d0565b610730565b6040519081526020016101c6565b34801561027b57600080fd5b5061021161028a366004612340565b60026020526000908152604090205460ff1681565b3480156102ab57600080fd5b506101ef6102ba366004612454565b61092a565b3480156102cb57600080fd5b506101ef6109bd565b3480156102e057600080fd5b506101ef6102ef36600461248b565b6109d1565b34801561030057600080fd5b506101ef61030f366004612518565b610aff565b34801561032057600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101c6565b61026161036e36600461254d565b610b89565b34801561037f57600080fd5b5061039361038e3660046125b6565b610f62565b6040516101c6949392919061263f565b3480156103af57600080fd5b506101ef6103be36600461267c565b611029565b3480156103cf57600080fd5b5061033b7f000000000000000000000000000000000000000000000000000000000000000081565b34801561040357600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061033b565b34801561043657600080fd5b5060015461033b9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561046357600080fd5b5061033b7f000000000000000000000000000000000000000000000000000000000000000081565b34801561049757600080fd5b506101ef6104a63660046126f1565b6112de565b3480156104b757600080fd5b506101ef6104c6366004612340565b6113a8565b3480156104d757600080fd5b506104fe6104e636600461270c565b60046020526000908152604090205463ffffffff1681565b60405163ffffffff90911681526020016101c6565b34801561051f57600080fd5b506101ef61052e366004612727565b61145c565b3360009081526002602052604090205460ff1661057c576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105878383836114b3565b6040805173ffffffffffffffffffffffffffffffffffffffff8581168252602082018490528416917f8210728e7c071f615b840ee026032693858fbcd5e5359e67e438c890f59e5620910160405180910390a2505050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f85572ffb00000000000000000000000000000000000000000000000000000000148061067257507fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a700000000000000000000000000000000000000000000000000000000145b92915050565b3360009081526002602052604090205460ff166106c1576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517f47f3fc2afa14fc8d55a57ed53e2a26b8e63d5f95adb4869b2da2bffdd38c63d290600090a250565b63ffffffff8516600090815260036020526040808220815160518082526080820190935290918391610803916020820181803683375050506002840180546000919061077b90612780565b80601f01602080910402602001604051908101604052809291908181526020018280546107a790612780565b80156107f45780601f106107c9576101008083540402835291602001916107f4565b820191906000526020600020905b8154815290600101906020018083116107d757829003601f168201915b505050505085600101546114e8565b825490915061081c9067ffffffffffffffff1682611630565b60015490935073ffffffffffffffffffffffffffffffffffffffff161561091f5760015482546040517f212cf54f00000000000000000000000000000000000000000000000000000000815263ffffffff8b16600482015273ffffffffffffffffffffffffffffffffffffffff898116602483015261ffff740100000000000000000000000000000000000000008504811660448401526801000000000000000090930490921660648201526084810186905291169063212cf54f9060a401602060405180830381865afa1580156108f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061091c91906127cd565b92505b505095945050505050565b6109326116ef565b73ffffffffffffffffffffffffffffffffffffffff821660008181526002602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001685151590811790915591519182527fe68d2c359a771606c400cf8b87000cf5864010363d6a736e98f5047b7bbe18e991015b60405180910390a25050565b6109c56116ef565b6109cf6000611770565b565b3360009081526002602052604090205460ff16610a1a576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610ac15736838383818110610a3857610a386127e6565b9050604002019050806020016020810190610a5391906126f1565b60036000610a6460208501856125b6565b63ffffffff1681526020810191909152604001600020805461ffff9290921668010000000000000000027fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff90921691909117905550600101610a1d565b507f69abe4111cf43d39e68d4c540ca52a855f900939e08d7f27a07a068ea5c060558282604051610af3929190612815565b60405180910390a15050565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610b75576040517fd7f733340000000000000000000000000000000000000000000000000000000081523360048201526024015b60405180910390fd5b610b86610b8182612a48565b6117e5565b50565b60003373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610bfa576040517f3885d60300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600381610c0c60208801886125b6565b63ffffffff16815260208082019290925260409081016000208151608081018352815467ffffffffffffffff8116825268010000000000000000900461ffff1693810193909352600181015491830191909152600281018054606084019190610c7490612780565b80601f0160208091040260200160405190810160405280929190818152602001828054610ca090612780565b8015610ced5780601f10610cc257610100808354040283529160200191610ced565b820191906000526020600020905b815481529060010190602001808311610cd057829003601f168201915b50505050508152505090506000610d56868060200190610d0d9190612af5565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050506060850151604086810151908b013592506114e8565b9050610d66826000015182611630565b9250610d7183611804565b81516040517f96f4e9f900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016916396f4e9f9918691610de7918690600401612b5a565b60206040518083038185885af1158015610e05573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610e2a91906127cd565b5060015473ffffffffffffffffffffffffffffffffffffffff1615610f595760015473ffffffffffffffffffffffffffffffffffffffff1663212cf54f610e7460208901896125b6565b610e8460a08a0160808b01612340565b600154602087015160405160e086901b7fffffffff0000000000000000000000000000000000000000000000000000000016815263ffffffff909416600485015273ffffffffffffffffffffffffffffffffffffffff909216602484015274010000000000000000000000000000000000000000900461ffff90811660448401521660648201526084810186905260a401602060405180830381865afa158015610f32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f5691906127cd565b92505b50509392505050565b60036020526000908152604090208054600182015460028301805467ffffffffffffffff8416946801000000000000000090940461ffff16939190610fa690612780565b80601f0160208091040260200160405190810160405280929190818152602001828054610fd290612780565b801561101f5780601f10610ff45761010080835404028352916020019161101f565b820191906000526020600020905b81548152906001019060200180831161100257829003601f168201915b5050505050905084565b3360009081526002602052604090205460ff16611072576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156112ac5736838383818110611090576110906127e6565b90506020028101906110a29190612c6f565b9050600460006003816110b860208601866125b6565b63ffffffff168152602080820192909252604090810160009081205467ffffffffffffffff168452838301949094529190910190912080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000169055611120908201826125b6565b60046000611134604085016020860161270c565b67ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002060006101000a81548163ffffffff021916908363ffffffff1602179055506040518060800160405280826020016020810190611192919061270c565b67ffffffffffffffff1681526020016111b160608401604085016126f1565b61ffff168152606083013560208201526040016111d16080840184612af5565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250939094525060039250611219905060208501856125b6565b63ffffffff1681526020808201929092526040908101600020835181549385015161ffff1668010000000000000000027fffffffffffffffffffffffffffffffffffffffffffff0000000000000000000090941667ffffffffffffffff9091161792909217825582015160018201556060820151600282019061129c9082612cfd565b5050600190920191506110759050565b507f5c257885b187e43434c98dff62b27d2799de2d31908ae78c56d824a8ec2bdb528282604051610af3929190612e60565b3360009081526002602052604090205460ff16611327576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000061ffff8416908102919091179091556040519081527f5cd03093b446ef387fae919d09687fb7200930dc43240f391a08f7f3a8243e619060200160405180910390a150565b6113b06116ef565b73ffffffffffffffffffffffffffffffffffffffff8116611453576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610b6c565b610b8681611770565b3360009081526002602052604090205460ff166114a5576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114af828261181b565b5050565b73ffffffffffffffffffffffffffffffffffffffff83166114dd576114d8828261190b565b505050565b6114d8838383611a11565b6115306040518060a00160405280606081526020016060815260200160608152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001606081525090565b6040518060a0016040528084815260200161154b8787611a7f565b8152602001600060405190808252806020026020018201604052801561159757816020015b60408051808201909152600080825260208201528152602001906001900390816115705790505b50815260006020808301829052604080518082018252878152820192835280516024810188905292511515604480850191909152815180850390910181526064909301815290820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f97a657c9000000000000000000000000000000000000000000000000000000001790529091015295945050505050565b6040517f20487ded00000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906320487ded906116a79086908690600401612b5a565b602060405180830381865afa1580156116c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116e891906127cd565b9392505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146109cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b6c565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6117f781602001518260400151611aab565b610b868160600151611bb6565b47818110156114af576114af3061181b8385612ff1565b6040517ffd9be52200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152602482018390527f0000000000000000000000000000000000000000000000000000000000000000169063fd9be52290604401600060405180830381600087803b1580156118ab57600080fd5b505af11580156118bf573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff167f78473f3f373f7673597f4f0fa5873cb4d375fea6d4339ad6b56dbd411513cb3f826040516109b191815260200190565b73ffffffffffffffffffffffffffffffffffffffff8216611958576040517f32fa6a1d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d80600081146119b2576040519150601f19603f3d011682016040523d82523d6000602084013e6119b7565b606091505b50509050806114d8576040517f2c024f9200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101839052604401610b6c565b73ffffffffffffffffffffffffffffffffffffffff8216611a5e576040517f32fa6a1d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114d873ffffffffffffffffffffffffffffffffffffffff84168383611c7c565b60608282604051602001611a94929190613004565b604051602081830303815290604052905092915050565b67ffffffffffffffff821660009081526004602090815260408083205463ffffffff16808452600390925282206002018054919291611ae990612780565b80601f0160208091040260200160405190810160405280929190818152602001828054611b1590612780565b8015611b625780601f10611b3757610100808354040283529160200191611b62565b820191906000526020600020905b815481529060010190602001808311611b4557829003601f168201915b505050505090508080519060200120838051906020012014611bb0576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b600080611bc283611d09565b6040517f0223536e000000000000000000000000000000000000000000000000000000008152919350915073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690630223536e90611c45908590859067ffffffffffffffff90600401613026565b600060405180830381600087803b158015611c5f57600080fd5b505af1158015611c73573d6000803e3d6000fd5b50505050505050565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526114d8908490611d81565b60606000611d1960206051613059565b835114611d52576040517ffbdf795400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611d6084826051611e90565b9250611d6d605182613059565b9050611d79848261200a565b915050915091565b6000611de3826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661208a9092919063ffffffff16565b9050805160001480611e04575080806020019051810190611e04919061306c565b6114d8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610b6c565b606081611e9e81601f613059565b1015611f06576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610b6c565b611f108284613059565b84511015611f7a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e64730000000000000000000000000000006044820152606401610b6c565b606082158015611f995760405191506000825260208201604052612001565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015611fd2578051835260209283019201611fba565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b6000612017826020613059565b83511015612081576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f746f427974657333325f6f75744f66426f756e647300000000000000000000006044820152606401610b6c565b50016020015190565b606061209984846000856120a1565b949350505050565b606082471015612133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610b6c565b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405161215c9190613089565b60006040518083038185875af1925050503d8060008114612199576040519150601f19603f3d011682016040523d82523d6000602084013e61219e565b606091505b50915091506121af878383876121ba565b979650505050505050565b606083156122505782516000036122495773ffffffffffffffffffffffffffffffffffffffff85163b612249576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610b6c565b5081612099565b61209983838151156122655781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6c919061309b565b803573ffffffffffffffffffffffffffffffffffffffff811681146122bd57600080fd5b919050565b6000806000606084860312156122d757600080fd5b6122e084612299565b92506122ee60208501612299565b9150604084013590509250925092565b60006020828403121561231057600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146116e857600080fd5b60006020828403121561235257600080fd5b6116e882612299565b803563ffffffff811681146122bd57600080fd5b803567ffffffffffffffff811681146122bd57600080fd5b60008083601f84011261239957600080fd5b50813567ffffffffffffffff8111156123b157600080fd5b6020830191508360208285010111156123c957600080fd5b9250929050565b6000806000806000608086880312156123e857600080fd5b6123f18661235b565b94506123ff6020870161236f565b935061240d60408701612299565b9250606086013567ffffffffffffffff81111561242957600080fd5b61243588828901612387565b969995985093965092949392505050565b8015158114610b8657600080fd5b6000806040838503121561246757600080fd5b61247083612299565b9150602083013561248081612446565b809150509250929050565b6000806020838503121561249e57600080fd5b823567ffffffffffffffff808211156124b657600080fd5b818501915085601f8301126124ca57600080fd5b8135818111156124d957600080fd5b8660208260061b85010111156124ee57600080fd5b60209290920196919550909350505050565b600060a0828403121561251257600080fd5b50919050565b60006020828403121561252a57600080fd5b813567ffffffffffffffff81111561254157600080fd5b61209984828501612500565b60008060006040848603121561256257600080fd5b833567ffffffffffffffff8082111561257a57600080fd5b61258687838801612500565b9450602086013591508082111561259c57600080fd5b506125a986828701612387565b9497909650939450505050565b6000602082840312156125c857600080fd5b6116e88261235b565b60005b838110156125ec5781810151838201526020016125d4565b50506000910152565b6000815180845261260d8160208601602086016125d1565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b67ffffffffffffffff8516815261ffff8416602082015282604082015260806060820152600061267260808301846125f5565b9695505050505050565b6000806020838503121561268f57600080fd5b823567ffffffffffffffff808211156126a757600080fd5b818501915085601f8301126126bb57600080fd5b8135818111156126ca57600080fd5b8660208260051b85010111156124ee57600080fd5b803561ffff811681146122bd57600080fd5b60006020828403121561270357600080fd5b6116e8826126df565b60006020828403121561271e57600080fd5b6116e88261236f565b6000806040838503121561273a57600080fd5b61274383612299565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600181811c9082168061279457607f821691505b602082108103612512577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000602082840312156127df57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020808252818101839052600090604080840186845b878110156128675763ffffffff6128418361235b565b16835261ffff6128528684016126df565b1683860152918301919083019060010161282b565b5090979650505050505050565b6040805190810167ffffffffffffffff8111828210171561289757612897612751565b60405290565b60405160a0810167ffffffffffffffff8111828210171561289757612897612751565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561290757612907612751565b604052919050565b600082601f83011261292057600080fd5b813567ffffffffffffffff81111561293a5761293a612751565b61296b60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016128c0565b81815284602083860101111561298057600080fd5b816020850160208301376000918101602001919091529392505050565b600082601f8301126129ae57600080fd5b8135602067ffffffffffffffff8211156129ca576129ca612751565b6129d8818360051b016128c0565b82815260069290921b840181019181810190868411156129f757600080fd5b8286015b84811015612a3d5760408189031215612a145760008081fd5b612a1c612874565b612a2582612299565b815281850135858201528352918301916040016129fb565b509695505050505050565b600060a08236031215612a5a57600080fd5b612a6261289d565b82358152612a726020840161236f565b6020820152604083013567ffffffffffffffff80821115612a9257600080fd5b612a9e3683870161290f565b60408401526060850135915080821115612ab757600080fd5b612ac33683870161290f565b60608401526080850135915080821115612adc57600080fd5b50612ae93682860161299d565b60808301525092915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112612b2a57600080fd5b83018035915067ffffffffffffffff821115612b4557600080fd5b6020019150368190038213156123c957600080fd5b6000604067ffffffffffffffff851683526020604081850152845160a06040860152612b8960e08601826125f5565b9050818601517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc080878403016060880152612bc483836125f5565b6040890151888203830160808a01528051808352908601945060009350908501905b80841015612c25578451805173ffffffffffffffffffffffffffffffffffffffff16835286015186830152938501936001939093019290860190612be6565b50606089015173ffffffffffffffffffffffffffffffffffffffff1660a08901526080890151888203830160c08a01529550612c6181876125f5565b9a9950505050505050505050565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61833603018112612ca357600080fd5b9190910192915050565b601f8211156114d8576000816000526020600020601f850160051c81016020861015612cd65750805b601f850160051c820191505b81811015612cf557828155600101612ce2565b505050505050565b815167ffffffffffffffff811115612d1757612d17612751565b612d2b81612d258454612780565b84612cad565b602080601f831160018114612d7e5760008415612d485750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555612cf5565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b82811015612dcb57888601518255948401946001909101908401612dac565b5085821015612e0757878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60208082528181018390526000906040808401600586901b8501820187855b88811015612fb4577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc088840301845281357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff618b3603018112612ee057600080fd5b8a0160a063ffffffff612ef28361235b565b168552612f0088830161236f565b67ffffffffffffffff8082168a88015261ffff612f1e8a86016126df565b16878a0152606084810135908801526080915081840135368590037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1018112612f6657600080fd5b90930189810193903581811115612f7c57600080fd5b803603851315612f8b57600080fd5b8383890152612f9d8489018287612e17565b988b01989750505093880193505050600101612e7f565b509098975050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561067257610672612fc2565b600083516130168184602088016125d1565b9190910191825250602001919050565b60608152600061303960608301866125f5565b905083602083015267ffffffffffffffff83166040830152949350505050565b8082018082111561067257610672612fc2565b60006020828403121561307e57600080fd5b81516116e881612446565b60008251612ca38184602087016125d1565b6020815260006116e860208301846125f556fea2646970667358221220575a1e69444cf006aede7fde3ae21bf817d03b9e17176dea715e52060ec5ca3064736f6c63430008160033",
1057
+ "bytecode": "0x60806040523480156200001157600080fd5b5060405162004364380380620043648339810160408190526200003491620002f3565b604080516000808252602082019092526001805460ff61ffff60e81b01191661017760ed1b179055600280546001600160a01b031916905533918491612ee09182858581156200008b576200008b60008362000172565b60005b8551811015620000ef57620000e67f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de878381518110620000d257620000d2620003d9565b60200260200101516200017260201b60201c565b6001016200008e565b5060005b81518110156200014057620001377fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775838381518110620000d257620000d2620003d9565b600101620000f3565b5050600580546001600160a01b0319166001600160a01b039990991698909817909755506200042c9650505050505050565b7f74845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bca82148015620001c357506000828152602081815260408083206001600160a01b038516845290915290205460ff16155b15620002105760018054601590620001eb90600160a81b90046001600160401b0316620003ef565b91906101000a8154816001600160401b0302191690836001600160401b031602179055505b6200021c828262000220565b5050565b6000828152602081815260408083206001600160a01b038516845290915290205460ff166200021c576000828152602081815260408083206001600160a01b03851684529091529020805460ff191660011790556200027c3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b634e487b7160e01b600052604160045260246000fd5b80516001600160a01b0381168114620002ee57600080fd5b919050565b600080604083850312156200030757600080fd5b82516001600160401b03808211156200031f57600080fd5b818501915085601f8301126200033457600080fd5b81516020828211156200034b576200034b620002c0565b8160051b604051601f19603f83011681018181108682111715620003735762000373620002c0565b6040529283528183019350848101820192898411156200039257600080fd5b948201945b83861015620003bb57620003ab86620002d6565b8552948201949382019362000397565b9650620003cc9050878201620002d6565b9450505050509250929050565b634e487b7160e01b600052603260045260246000fd5b60006001600160401b038281166002600160401b031981016200042257634e487b7160e01b600052601160045260246000fd5b6001019392505050565b613f28806200043c6000396000f3fe6080604052600436106101db5760003560e01c8063741bef1a11610102578063c0d7865511610095578063cd88b90311610064578063cd88b90314610642578063d2ae210414610662578063d547741f146106b5578063f887ea40146106d557600080fd5b8063c0d78655146105b0578063c358de0a146105d0578063c416aa51146105f0578063c7b2370b1461062257600080fd5b806395d376d7116100d157806395d376d71461052b5780639e9449651461053e578063a217fddf1461056e578063af576c7a1461058357600080fd5b8063741bef1a146104485780637a6ce2cc1461049a57806385572ffb146104ba57806391d14854146104da57600080fd5b80632de113761161017a5780634cfa6d2c116101495780634cfa6d2c146103b857806351b6a0fd146103f05780635c975abb14610410578063724e78da1461042857600080fd5b80632de11376146103385780632f2ff15d1461035857806330bb3aac1461037857806336568abe1461039857600080fd5b80631095b6d7116101b65780631095b6d71461028d57806316c38b3c146102ad578063248a9ca3146102cd57806326e67a371461030b57600080fd5b8062bf2e80146101e757806301e336671461023b57806301ffc9a71461025d57600080fd5b366101e257005b600080fd5b3480156101f357600080fd5b50600154610223907d010000000000000000000000000000000000000000000000000000000000900461ffff1681565b60405161ffff90911681526020015b60405180910390f35b34801561024757600080fd5b5061025b610256366004612ec5565b610702565b005b34801561026957600080fd5b5061027d610278366004612f01565b61073d565b6040519015158152602001610232565b34801561029957600080fd5b5061025b6102a8366004612ec5565b610799565b3480156102b957600080fd5b5061025b6102c8366004612f51565b610928565b3480156102d957600080fd5b506102fd6102e8366004612f6e565b60009081526020819052604090206001015490565b604051908152602001610232565b34801561031757600080fd5b5061032b610326366004612f9b565b61094d565b6040516102329190612fb6565b34801561034457600080fd5b5061027d610353366004612ffd565b6109d4565b34801561036457600080fd5b5061025b610373366004613018565b610ab9565b34801561038457600080fd5b506102fd6103933660046130a5565b610ae3565b3480156103a457600080fd5b5061025b6103b3366004613018565b610d65565b3480156103c457600080fd5b506102fd6103d336600461311b565b600460209081526000928352604080842090915290825290205481565b3480156103fc57600080fd5b5061025b61040b366004613145565b610d97565b34801561041c57600080fd5b5060015460ff1661027d565b34801561043457600080fd5b5061025b610443366004612ffd565b610e8e565b34801561045457600080fd5b506002546104759073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610232565b3480156104a657600080fd5b5061025b6104b53660046131ff565b610f33565b3480156104c657600080fd5b5061025b6104d5366004613259565b61118f565b3480156104e657600080fd5b5061027d6104f5366004613018565b60009182526020828152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6102fd61053936600461328e565b611259565b34801561054a57600080fd5b5061055e610559366004612f9b565b611653565b6040516102329493929190613365565b34801561057a57600080fd5b506102fd600081565b34801561058f57600080fd5b506105a361059e3660046133a3565b61171b565b60405161023291906133be565b3480156105bc57600080fd5b5061025b6105cb366004612ffd565b6117b5565b3480156105dc57600080fd5b5061025b6105eb3660046133e3565b611852565b3480156105fc57600080fd5b5060015461047590610100900473ffffffffffffffffffffffffffffffffffffffff1681565b34801561062e57600080fd5b5061025b61063d366004612ffd565b611900565b34801561064e57600080fd5b5061025b61065d3660046133fe565b6119a4565b34801561066e57600080fd5b5060015461069c907501000000000000000000000000000000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff9091168152602001610232565b3480156106c157600080fd5b5061025b6106d0366004613018565b6119f5565b3480156106e157600080fd5b506005546104759073ffffffffffffffffffffffffffffffffffffffff1681565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561072c81611a1a565b610737848484611a24565b50505050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f85572ffb000000000000000000000000000000000000000000000000000000001480610793575061079382611a54565b92915050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217756107c381611a1a565b73ffffffffffffffffffffffffffffffffffffffff841660009081527f9b50f4667d2d24216ccbf0dce3a90c0f620fa4d895e7b069d80ff6247fd25620602052604090205460ff16610841576040517f5ee08b9700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517ffd9be52200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301526024820184905285169063fd9be52290604401600060405180830381600087803b1580156108b157600080fd5b505af11580156108c5573d6000803e3d6000fd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8089168252871660208201529081018590527f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb9250606001905060405180910390a150505050565b600061093381611a1a565b811561094557610941611aeb565b5050565b610941611b6a565b63ffffffff81166000908152600360209081526040918290208054835181840281018401909452808452606093928301828280156109c857602002820191906000526020600020906000905b825461010083900a900460ff168152602060019283018181049485019490930390920291018084116109995790505b50505050509050919050565b73ffffffffffffffffffffffffffffffffffffffff811660009081527f93c430521711328044ae92d0f1f1286cf040bc4a382f1642bd89984e86630553602052604081205460ff1615610a2957506000919050565b6001547501000000000000000000000000000000000000000000900467ffffffffffffffff161580610a9f575073ffffffffffffffffffffffffffffffffffffffff821660009081527f4ac82e3087b7dedf7f532cbc6915c722df8c1e31f1388c318a617b52760eaf8b602052604090205460ff165b15610aac57506001919050565b506000919050565b919050565b600082815260208190526040902060010154610ad481611a1a565b610ade8383611bc1565b505050565b600083610aef816109d4565b610b25576040517f4ab5ebcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080516080808201835263ffffffff8a1680835267ffffffffffffffff808b1660208086019190915273ffffffffffffffffffffffffffffffffffffffff8b16858701526001805461ffff7d01000000000000000000000000000000000000000000000000000000000090910481166060880152600094855260068352878520885196870189528054948516875268010000000000000000909404169185019190915281018054949592949192840191610bdf90613444565b80601f0160208091040260200160405190810160405280929190818152602001828054610c0b90613444565b8015610c585780601f10610c2d57610100808354040283529160200191610c58565b820191906000526020600020905b815481529060010190602001808311610c3b57829003601f168201915b5050505050815260200160028201548152505090506000610c77611c87565b90506000610c8e8284604001518560600151611cba565b905060018054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cbe56fcc8585848c8c600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518763ffffffff1660e01b8152600401610d15969594939291906135b7565b602060405180830381865afa158015610d32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d5691906136a1565b9b9a5050505050505050505050565b6040517fdec9f03100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610da281611a1a565b60005b82811015610e4f5736848483818110610dc057610dc06136ba565b60600291909101915050604081013560046000610de06020850185612ffd565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000836020016020810190610e2f9190612f9b565b63ffffffff16815260208101919091526040016000205550600101610da5565b507f360a0efdea8fcc9a11ee20a2099e314ddcf49a941d66790cd4e5adea30faa0748383604051610e819291906136e9565b60405180910390a1505050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775610eb881611a1a565b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84169081179091556040519081527ff724a45d041687842411f2b977ef22ab8f43c8f1104f4592b42a00f9b34a643d906020015b60405180910390a15050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775610f5d81611a1a565b60005b8281101561115d5736848483818110610f7b57610f7b6136ba565b9050602002810190610f8d9190613764565b905060076000600681610fa36020860186612f9b565b63ffffffff168152602080820192909252604090810160009081205467ffffffffffffffff1684529183019390935291018120610fdf91612da9565b610fec60808201826137a2565b6007600061100060608601604087016133a3565b67ffffffffffffffff168152602081019190915260400160002091611026919083613886565b50604051806080016040528082604001602081019061104591906133a3565b67ffffffffffffffff16815260200182602001602081019061106791906133e3565b61ffff16815260200161107d60808401846137a2565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525093855250505060608401356020928301526006916110cd90850185612f9b565b63ffffffff1681526020808201929092526040908101600020835181549385015161ffff1668010000000000000000027fffffffffffffffffffffffffffffffffffffffffffff0000000000000000000090941667ffffffffffffffff90911617929092178255820151600182019061114690826139a0565b506060919091015160029091015550600101610f60565b507f3e45c9c6c5ff16903cc7bc124fa7a101346d0e71bd9326e3f9370e2a90d57dd08383604051610e81929190613aba565b60055473ffffffffffffffffffffffffffffffffffffffff1633146111e7576040517f4641de990000000000000000000000000000000000000000000000000000000081523360048201526024015b60405180910390fd5b6112416111fa60408301602084016133a3565b61120760408401846137a2565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611ded92505050565b61125661125160608301836137a2565b611edc565b50565b600061126b60a0850160808601612ffd565b611274816109d4565b6112aa576040517f4ab5ebcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006112c2336112bd6020890189612f9b565b611f6f565b6040805160808101909152909150600090806112e160208a018a612f9b565b63ffffffff1681526020016112fc60808a0160608b016133a3565b67ffffffffffffffff16815260200161131b60a08a0160808b01612ffd565b73ffffffffffffffffffffffffffffffffffffffff1681526001547d010000000000000000000000000000000000000000000000000000000000900461ffff166020918201529091506000906006908290611378908b018b612f9b565b63ffffffff16815260208082019290925260409081016000208151608081018352815467ffffffffffffffff8116825268010000000000000000900461ffff169381019390935260018101805491928401916113d390613444565b80601f01602080910402602001604051908101604052809291908181526020018280546113ff90613444565b801561144c5780601f106114215761010080835404028352916020019161144c565b820191906000526020600020905b81548152906001019060200180831161142f57829003601f168201915b50505050508152602001600282015481525050905060006114b5848a806020019061147791906137a2565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505060408c0135612001565b905060006114cc8284604001518560600151611cba565b90506000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600060018054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637e034df88787868f8f886040518763ffffffff1660e01b815260040161155a969594939291906135b7565b60408051808303816000875af1158015611578573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061159c9190613c1b565b995090506115aa3382612016565b84516040517f96f4e9f900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416916396f4e9f9918491611600918890600401613c3f565b60206040518083038185885af115801561161e573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061164391906136a1565b5050505050505050509392505050565b6006602052600090815260409020805460018201805467ffffffffffffffff8316936801000000000000000090930461ffff1692919061169290613444565b80601f01602080910402602001604051908101604052809291908181526020018280546116be90613444565b801561170b5780601f106116e05761010080835404028352916020019161170b565b820191906000526020600020905b8154815290600101906020018083116116ee57829003601f168201915b5050505050908060020154905084565b6007602052600090815260409020805461173490613444565b80601f016020809104026020016040519081016040528092919081815260200182805461176090613444565b80156117ad5780601f10611782576101008083540402835291602001916117ad565b820191906000526020600020905b81548152906001019060200180831161179057829003601f168201915b505050505081565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217756117df81611a1a565b600580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84169081179091556040519081527fc6b438e6a8a59579ce6a4406cbd203b740e0d47b458aae6596339bcd40c40d1590602001610f27565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561187c81611a1a565b600180547fff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167d01000000000000000000000000000000000000000000000000000000000061ffff8516908102919091179091556040519081527f7af0ac740036ffb1c97b03697859d729e80a44ae5030543d64971c313565ab4d90602001610f27565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561192a81611a1a565b600180547fffffffffffffffffffffff0000000000000000000000000000000000000000ff1661010073ffffffffffffffffffffffffffffffffffffffff8516908102919091179091556040519081527f1399be28223800f8669b3ba5f8721d9fc16fc4e8d0bbf98378791c8c5a3015e090602001610f27565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217756119ce81611a1a565b63ffffffff841660009081526003602052604090206119ee908484612de3565b5050505050565b600082815260208190526040902060010154611a1081611a1a565b610ade838361206f565b6112568133612134565b73ffffffffffffffffffffffffffffffffffffffff8316611a4957610ade82826121ec565b610ade8383836122f2565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061079357507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614610793565b611af3612360565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b611b726123cf565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33611b40565b7f74845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bca82148015611c1e575060008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16155b15611c7d5760018054601590611c56907501000000000000000000000000000000000000000000900467ffffffffffffffff16613c91565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b610941828261243b565b60408051605180825260808201909252606091611cb59160009160208201818036833701905050600061252b565b905090565b611d026040518060a00160405280606081526020016060815260200160608152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001606081525090565b6040805160a0810182528481526020808201879052825160008082529181018452919283019190611d55565b6040805180820190915260008082526020820152815260200190600190039081611d2e5790505b50815260006020808301829052604080518082018252878152820192835280516024810188905292511515604480850191909152815180850390910181526064909301815290820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f97a657c90000000000000000000000000000000000000000000000000000000017905290910152949350505050565b67ffffffffffffffff821660009081526007602052604081208054611e1190613444565b80601f0160208091040260200160405190810160405280929190818152602001828054611e3d90613444565b8015611e8a5780601f10611e5f57610100808354040283529160200191611e8a565b820191906000526020600020905b815481529060010190602001808311611e6d57829003601f168201915b505050505090508080519060200120828051906020012014610ade5782826040517f0b4f78c20000000000000000000000000000000000000000000000000000000081526004016111de929190613cb8565b6000806000611eeb858561255a565b9250925092508273ffffffffffffffffffffffffffffffffffffffff16630223536e838367ffffffffffffffff6040518463ffffffff1660e01b8152600401611f3693929190613cdb565b600060405180830381600087803b158015611f5057600080fd5b505af1158015611f64573d6000803e3d6000fd5b505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260046020908152604080832063ffffffff8516845290915290205480610793576040517ff25127e600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015263ffffffff831660248201526044016111de565b606061200e84848461252b565b949350505050565b4781811015610ade576120298330612629565b504781811015610ade576040517f6079581f00000000000000000000000000000000000000000000000000000000815260048101829052602481018390526044016111de565b7f74845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bca821480156120cb575060008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff165b1561212a5760018054601590612103907501000000000000000000000000000000000000000000900467ffffffffffffffff16613d0e565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b61094182826127a0565b60008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff166109415761217281612857565b61217d836020612876565b60405160200161218e929190613d50565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290527f08c379a00000000000000000000000000000000000000000000000000000000082526111de916004016133be565b73ffffffffffffffffffffffffffffffffffffffff8216612239576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114612293576040519150601f19603f3d011682016040523d82523d6000602084013e612298565b606091505b5050905080610ade576040517f465bc83400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602481018390526044016111de565b73ffffffffffffffffffffffffffffffffffffffff821661233f576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ade73ffffffffffffffffffffffffffffffffffffffff84168383612ac0565b60015460ff16156123cd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016111de565b565b60015460ff166123cd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016111de565b60008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff166109415760008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff85168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556124cd3390565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b606083828460405160200161254293929190613dd1565b60405160208183030381529060405290509392505050565b600060608161256b60516040613dfe565b84146125a3576040517ff1d10e0d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6125c06125b4602060008789613e11565b6125bd91613e3b565b90565b92506125d0604060208688613e11565b6125d991613e3b565b90506125e88460408188613e11565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509598929750929550909350505050565b6040517ffaaebd2100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff84169063faaebd2190602401602060405180830381865afa158015612696573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126ba91906136a1565b90508015610ade576040517ffd9be52200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301526024820183905284169063fd9be52290604401600060405180830381600087803b15801561273257600080fd5b505af1158015612746573d6000803e3d6000fd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8088168252861660208201529081018490527f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb92506060019050610e81565b60008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16156109415760008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b606061079373ffffffffffffffffffffffffffffffffffffffff831660145b60606000612885836002613e77565b612890906002613dfe565b67ffffffffffffffff8111156128a8576128a8613807565b6040519080825280601f01601f1916602001820160405280156128d2576020820181803683370190505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110612909576129096136ba565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f78000000000000000000000000000000000000000000000000000000000000008160018151811061296c5761296c6136ba565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060006129a8846002613e77565b6129b3906001613dfe565b90505b6001811115612a50577f303132333435363738396162636465660000000000000000000000000000000085600f16601081106129f4576129f46136ba565b1a60f81b828281518110612a0a57612a0a6136ba565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060049490941c93612a4981613e8e565b90506129b6565b508315612ab9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016111de565b9392505050565b6040805173ffffffffffffffffffffffffffffffffffffffff848116602483015260448083018590528351808403909101815260649092018352602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905283518085019094528084527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656490840152610ade92869291600091612b8b918516908490612c38565b9050805160001480612bac575080806020019051810190612bac9190613ec3565b610ade576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016111de565b606061200e8484600085856000808673ffffffffffffffffffffffffffffffffffffffff168587604051612c6c9190613ee0565b60006040518083038185875af1925050503d8060008114612ca9576040519150601f19603f3d011682016040523d82523d6000602084013e612cae565b606091505b5091509150612cbf87838387612cca565b979650505050505050565b60608315612d60578251600003612d595773ffffffffffffffffffffffffffffffffffffffff85163b612d59576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016111de565b508161200e565b61200e8383815115612d755781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111de91906133be565b508054612db590613444565b6000825580601f10612dc5575050565b601f0160209004906000526020600020908101906112569190612e8c565b82805482825590600052602060002090601f01602090048101928215612e7c5791602002820160005b83821115612e4d57833560ff1683826101000a81548160ff021916908360ff1602179055509260200192600101602081600001049283019260010302612e0c565b8015612e7a5782816101000a81549060ff0219169055600101602081600001049283019260010302612e4d565b505b50612e88929150612e8c565b5090565b5b80821115612e885760008155600101612e8d565b803573ffffffffffffffffffffffffffffffffffffffff81168114610ab457600080fd5b600080600060608486031215612eda57600080fd5b612ee384612ea1565b9250612ef160208501612ea1565b9150604084013590509250925092565b600060208284031215612f1357600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114612ab957600080fd5b801515811461125657600080fd5b600060208284031215612f6357600080fd5b8135612ab981612f43565b600060208284031215612f8057600080fd5b5035919050565b803563ffffffff81168114610ab457600080fd5b600060208284031215612fad57600080fd5b612ab982612f87565b6020808252825182820181905260009190848201906040850190845b81811015612ff157835160ff1683529284019291840191600101612fd2565b50909695505050505050565b60006020828403121561300f57600080fd5b612ab982612ea1565b6000806040838503121561302b57600080fd5b8235915061303b60208401612ea1565b90509250929050565b803567ffffffffffffffff81168114610ab457600080fd5b60008083601f84011261306e57600080fd5b50813567ffffffffffffffff81111561308657600080fd5b60208301915083602082850101111561309e57600080fd5b9250929050565b6000806000806000608086880312156130bd57600080fd5b6130c686612f87565b94506130d460208701613044565b93506130e260408701612ea1565b9250606086013567ffffffffffffffff8111156130fe57600080fd5b61310a8882890161305c565b969995985093965092949392505050565b6000806040838503121561312e57600080fd5b61313783612ea1565b915061303b60208401612f87565b6000806020838503121561315857600080fd5b823567ffffffffffffffff8082111561317057600080fd5b818501915085601f83011261318457600080fd5b81358181111561319357600080fd5b8660206060830285010111156131a857600080fd5b60209290920196919550909350505050565b60008083601f8401126131cc57600080fd5b50813567ffffffffffffffff8111156131e457600080fd5b6020830191508360208260051b850101111561309e57600080fd5b6000806020838503121561321257600080fd5b823567ffffffffffffffff81111561322957600080fd5b613235858286016131ba565b90969095509350505050565b600060a0828403121561325357600080fd5b50919050565b60006020828403121561326b57600080fd5b813567ffffffffffffffff81111561328257600080fd5b61200e84828501613241565b6000806000604084860312156132a357600080fd5b833567ffffffffffffffff808211156132bb57600080fd5b6132c787838801613241565b945060208601359150808211156132dd57600080fd5b506132ea8682870161305c565b9497909650939450505050565b60005b838110156133125781810151838201526020016132fa565b50506000910152565b600081518084526133338160208601602086016132f7565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b67ffffffffffffffff8516815261ffff84166020820152608060408201526000613392608083018561331b565b905082606083015295945050505050565b6000602082840312156133b557600080fd5b612ab982613044565b602081526000612ab9602083018461331b565b803561ffff81168114610ab457600080fd5b6000602082840312156133f557600080fd5b612ab9826133d1565b60008060006040848603121561341357600080fd5b61341c84612f87565b9250602084013567ffffffffffffffff81111561343857600080fd5b6132ea868287016131ba565b600181811c9082168061345857607f821691505b602082108103613253577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000815160a084526134a660a085018261331b565b9050602080840151858303828701526134bf838261331b565b60408681015188830389830152805180845290850195509092506000918401905b8083101561351f578551805173ffffffffffffffffffffffffffffffffffffffff168352850151858301529484019460019290920191908301906134e0565b5060608701519450613549606089018673ffffffffffffffffffffffffffffffffffffffff169052565b608087015194508781036080890152613562818661331b565b98975050505050505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b600061010063ffffffff8951168352602089015167ffffffffffffffff808216602086015273ffffffffffffffffffffffffffffffffffffffff60408c015116604086015260608b0151915061ffff8083166060870152836080870152818b5116848701528060208c015116610120870152505050506040870151608061014084015261364861018084018261331b565b9050606088015161016084015282810360a08401526136678188613491565b905082810360c084015261367c81868861356e565b915050612cbf60e083018473ffffffffffffffffffffffffffffffffffffffff169052565b6000602082840312156136b357600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020808252818101839052600090604080840186845b878110156137575773ffffffffffffffffffffffffffffffffffffffff61372583612ea1565b16835263ffffffff613738868401612f87565b16838601528184013584840152606092830192909101906001016136ff565b5090979650505050505050565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6183360301811261379857600080fd5b9190910192915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126137d757600080fd5b83018035915067ffffffffffffffff8211156137f257600080fd5b60200191503681900382131561309e57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f821115610ade576000816000526020600020601f850160051c8101602086101561385f5750805b601f850160051c820191505b8181101561387e5782815560010161386b565b505050505050565b67ffffffffffffffff83111561389e5761389e613807565b6138b2836138ac8354613444565b83613836565b6000601f84116001811461390457600085156138ce5750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b1783556119ee565b6000838152602090207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0861690835b828110156139535786850135825560209485019460019092019101613933565b508682101561398e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b0183555050505050565b815167ffffffffffffffff8111156139ba576139ba613807565b6139ce816139c88454613444565b84613836565b602080601f831160018114613a2157600084156139eb5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b17855561387e565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b82811015613a6e57888601518255948401946001909101908401613a4f565b5085821015613aaa57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b60208082528181018390526000906040808401600586901b8501820187855b88811015613c0d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc088840301845281357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff618b3603018112613b3a57600080fd5b8a0160a063ffffffff613b4c83612f87565b16855261ffff613b5d8984016133d1565b1688860152613b6d878301613044565b67ffffffffffffffff908116868901526060838101359087015260809081840135368590037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1018112613bbf57600080fd5b90930189810193903581811115613bd557600080fd5b803603851315613be457600080fd5b8383890152613bf6848901828761356e565b988b01989750505093880193505050600101613ad9565b509098975050505050505050565b60008060408385031215613c2e57600080fd5b505080516020909101519092909150565b67ffffffffffffffff8316815260406020820152600061200e6040830184613491565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff808316818103613cae57613cae613c62565b6001019392505050565b67ffffffffffffffff8316815260406020820152600061200e604083018461331b565b606081526000613cee606083018661331b565b905083602083015267ffffffffffffffff83166040830152949350505050565b600067ffffffffffffffff821680613d2857613d28613c62565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0192915050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351613d888160178501602088016132f7565b7f206973206d697373696e6720726f6c65200000000000000000000000000000006017918401918201528351613dc58160288401602088016132f7565b01602801949350505050565b83815282602082015260008251613def8160408501602087016132f7565b91909101604001949350505050565b8082018082111561079357610793613c62565b60008085851115613e2157600080fd5b83861115613e2e57600080fd5b5050820193919092039150565b80356020831015610793577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b1692915050565b808202811582820484141761079357610793613c62565b600081613e9d57613e9d613c62565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b600060208284031215613ed557600080fd5b8151612ab981612f43565b600082516137988184602087016132f756fea26469706673582212200226055293f5c30027748b5fe02188089946a9f46fc60c5de9cc862f670c11a764736f6c63430008160033",
1058
+ "deployedBytecode": "0x6080604052600436106101db5760003560e01c8063741bef1a11610102578063c0d7865511610095578063cd88b90311610064578063cd88b90314610642578063d2ae210414610662578063d547741f146106b5578063f887ea40146106d557600080fd5b8063c0d78655146105b0578063c358de0a146105d0578063c416aa51146105f0578063c7b2370b1461062257600080fd5b806395d376d7116100d157806395d376d71461052b5780639e9449651461053e578063a217fddf1461056e578063af576c7a1461058357600080fd5b8063741bef1a146104485780637a6ce2cc1461049a57806385572ffb146104ba57806391d14854146104da57600080fd5b80632de113761161017a5780634cfa6d2c116101495780634cfa6d2c146103b857806351b6a0fd146103f05780635c975abb14610410578063724e78da1461042857600080fd5b80632de11376146103385780632f2ff15d1461035857806330bb3aac1461037857806336568abe1461039857600080fd5b80631095b6d7116101b65780631095b6d71461028d57806316c38b3c146102ad578063248a9ca3146102cd57806326e67a371461030b57600080fd5b8062bf2e80146101e757806301e336671461023b57806301ffc9a71461025d57600080fd5b366101e257005b600080fd5b3480156101f357600080fd5b50600154610223907d010000000000000000000000000000000000000000000000000000000000900461ffff1681565b60405161ffff90911681526020015b60405180910390f35b34801561024757600080fd5b5061025b610256366004612ec5565b610702565b005b34801561026957600080fd5b5061027d610278366004612f01565b61073d565b6040519015158152602001610232565b34801561029957600080fd5b5061025b6102a8366004612ec5565b610799565b3480156102b957600080fd5b5061025b6102c8366004612f51565b610928565b3480156102d957600080fd5b506102fd6102e8366004612f6e565b60009081526020819052604090206001015490565b604051908152602001610232565b34801561031757600080fd5b5061032b610326366004612f9b565b61094d565b6040516102329190612fb6565b34801561034457600080fd5b5061027d610353366004612ffd565b6109d4565b34801561036457600080fd5b5061025b610373366004613018565b610ab9565b34801561038457600080fd5b506102fd6103933660046130a5565b610ae3565b3480156103a457600080fd5b5061025b6103b3366004613018565b610d65565b3480156103c457600080fd5b506102fd6103d336600461311b565b600460209081526000928352604080842090915290825290205481565b3480156103fc57600080fd5b5061025b61040b366004613145565b610d97565b34801561041c57600080fd5b5060015460ff1661027d565b34801561043457600080fd5b5061025b610443366004612ffd565b610e8e565b34801561045457600080fd5b506002546104759073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610232565b3480156104a657600080fd5b5061025b6104b53660046131ff565b610f33565b3480156104c657600080fd5b5061025b6104d5366004613259565b61118f565b3480156104e657600080fd5b5061027d6104f5366004613018565b60009182526020828152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6102fd61053936600461328e565b611259565b34801561054a57600080fd5b5061055e610559366004612f9b565b611653565b6040516102329493929190613365565b34801561057a57600080fd5b506102fd600081565b34801561058f57600080fd5b506105a361059e3660046133a3565b61171b565b60405161023291906133be565b3480156105bc57600080fd5b5061025b6105cb366004612ffd565b6117b5565b3480156105dc57600080fd5b5061025b6105eb3660046133e3565b611852565b3480156105fc57600080fd5b5060015461047590610100900473ffffffffffffffffffffffffffffffffffffffff1681565b34801561062e57600080fd5b5061025b61063d366004612ffd565b611900565b34801561064e57600080fd5b5061025b61065d3660046133fe565b6119a4565b34801561066e57600080fd5b5060015461069c907501000000000000000000000000000000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff9091168152602001610232565b3480156106c157600080fd5b5061025b6106d0366004613018565b6119f5565b3480156106e157600080fd5b506005546104759073ffffffffffffffffffffffffffffffffffffffff1681565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561072c81611a1a565b610737848484611a24565b50505050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f85572ffb000000000000000000000000000000000000000000000000000000001480610793575061079382611a54565b92915050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217756107c381611a1a565b73ffffffffffffffffffffffffffffffffffffffff841660009081527f9b50f4667d2d24216ccbf0dce3a90c0f620fa4d895e7b069d80ff6247fd25620602052604090205460ff16610841576040517f5ee08b9700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517ffd9be52200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301526024820184905285169063fd9be52290604401600060405180830381600087803b1580156108b157600080fd5b505af11580156108c5573d6000803e3d6000fd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8089168252871660208201529081018590527f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb9250606001905060405180910390a150505050565b600061093381611a1a565b811561094557610941611aeb565b5050565b610941611b6a565b63ffffffff81166000908152600360209081526040918290208054835181840281018401909452808452606093928301828280156109c857602002820191906000526020600020906000905b825461010083900a900460ff168152602060019283018181049485019490930390920291018084116109995790505b50505050509050919050565b73ffffffffffffffffffffffffffffffffffffffff811660009081527f93c430521711328044ae92d0f1f1286cf040bc4a382f1642bd89984e86630553602052604081205460ff1615610a2957506000919050565b6001547501000000000000000000000000000000000000000000900467ffffffffffffffff161580610a9f575073ffffffffffffffffffffffffffffffffffffffff821660009081527f4ac82e3087b7dedf7f532cbc6915c722df8c1e31f1388c318a617b52760eaf8b602052604090205460ff165b15610aac57506001919050565b506000919050565b919050565b600082815260208190526040902060010154610ad481611a1a565b610ade8383611bc1565b505050565b600083610aef816109d4565b610b25576040517f4ab5ebcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080516080808201835263ffffffff8a1680835267ffffffffffffffff808b1660208086019190915273ffffffffffffffffffffffffffffffffffffffff8b16858701526001805461ffff7d01000000000000000000000000000000000000000000000000000000000090910481166060880152600094855260068352878520885196870189528054948516875268010000000000000000909404169185019190915281018054949592949192840191610bdf90613444565b80601f0160208091040260200160405190810160405280929190818152602001828054610c0b90613444565b8015610c585780601f10610c2d57610100808354040283529160200191610c58565b820191906000526020600020905b815481529060010190602001808311610c3b57829003601f168201915b5050505050815260200160028201548152505090506000610c77611c87565b90506000610c8e8284604001518560600151611cba565b905060018054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cbe56fcc8585848c8c600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518763ffffffff1660e01b8152600401610d15969594939291906135b7565b602060405180830381865afa158015610d32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d5691906136a1565b9b9a5050505050505050505050565b6040517fdec9f03100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610da281611a1a565b60005b82811015610e4f5736848483818110610dc057610dc06136ba565b60600291909101915050604081013560046000610de06020850185612ffd565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000836020016020810190610e2f9190612f9b565b63ffffffff16815260208101919091526040016000205550600101610da5565b507f360a0efdea8fcc9a11ee20a2099e314ddcf49a941d66790cd4e5adea30faa0748383604051610e819291906136e9565b60405180910390a1505050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775610eb881611a1a565b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84169081179091556040519081527ff724a45d041687842411f2b977ef22ab8f43c8f1104f4592b42a00f9b34a643d906020015b60405180910390a15050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775610f5d81611a1a565b60005b8281101561115d5736848483818110610f7b57610f7b6136ba565b9050602002810190610f8d9190613764565b905060076000600681610fa36020860186612f9b565b63ffffffff168152602080820192909252604090810160009081205467ffffffffffffffff1684529183019390935291018120610fdf91612da9565b610fec60808201826137a2565b6007600061100060608601604087016133a3565b67ffffffffffffffff168152602081019190915260400160002091611026919083613886565b50604051806080016040528082604001602081019061104591906133a3565b67ffffffffffffffff16815260200182602001602081019061106791906133e3565b61ffff16815260200161107d60808401846137a2565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525093855250505060608401356020928301526006916110cd90850185612f9b565b63ffffffff1681526020808201929092526040908101600020835181549385015161ffff1668010000000000000000027fffffffffffffffffffffffffffffffffffffffffffff0000000000000000000090941667ffffffffffffffff90911617929092178255820151600182019061114690826139a0565b506060919091015160029091015550600101610f60565b507f3e45c9c6c5ff16903cc7bc124fa7a101346d0e71bd9326e3f9370e2a90d57dd08383604051610e81929190613aba565b60055473ffffffffffffffffffffffffffffffffffffffff1633146111e7576040517f4641de990000000000000000000000000000000000000000000000000000000081523360048201526024015b60405180910390fd5b6112416111fa60408301602084016133a3565b61120760408401846137a2565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611ded92505050565b61125661125160608301836137a2565b611edc565b50565b600061126b60a0850160808601612ffd565b611274816109d4565b6112aa576040517f4ab5ebcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006112c2336112bd6020890189612f9b565b611f6f565b6040805160808101909152909150600090806112e160208a018a612f9b565b63ffffffff1681526020016112fc60808a0160608b016133a3565b67ffffffffffffffff16815260200161131b60a08a0160808b01612ffd565b73ffffffffffffffffffffffffffffffffffffffff1681526001547d010000000000000000000000000000000000000000000000000000000000900461ffff166020918201529091506000906006908290611378908b018b612f9b565b63ffffffff16815260208082019290925260409081016000208151608081018352815467ffffffffffffffff8116825268010000000000000000900461ffff169381019390935260018101805491928401916113d390613444565b80601f01602080910402602001604051908101604052809291908181526020018280546113ff90613444565b801561144c5780601f106114215761010080835404028352916020019161144c565b820191906000526020600020905b81548152906001019060200180831161142f57829003601f168201915b50505050508152602001600282015481525050905060006114b5848a806020019061147791906137a2565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505060408c0135612001565b905060006114cc8284604001518560600151611cba565b90506000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600060018054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637e034df88787868f8f886040518763ffffffff1660e01b815260040161155a969594939291906135b7565b60408051808303816000875af1158015611578573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061159c9190613c1b565b995090506115aa3382612016565b84516040517f96f4e9f900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416916396f4e9f9918491611600918890600401613c3f565b60206040518083038185885af115801561161e573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061164391906136a1565b5050505050505050509392505050565b6006602052600090815260409020805460018201805467ffffffffffffffff8316936801000000000000000090930461ffff1692919061169290613444565b80601f01602080910402602001604051908101604052809291908181526020018280546116be90613444565b801561170b5780601f106116e05761010080835404028352916020019161170b565b820191906000526020600020905b8154815290600101906020018083116116ee57829003601f168201915b5050505050908060020154905084565b6007602052600090815260409020805461173490613444565b80601f016020809104026020016040519081016040528092919081815260200182805461176090613444565b80156117ad5780601f10611782576101008083540402835291602001916117ad565b820191906000526020600020905b81548152906001019060200180831161179057829003601f168201915b505050505081565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217756117df81611a1a565b600580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84169081179091556040519081527fc6b438e6a8a59579ce6a4406cbd203b740e0d47b458aae6596339bcd40c40d1590602001610f27565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561187c81611a1a565b600180547fff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167d01000000000000000000000000000000000000000000000000000000000061ffff8516908102919091179091556040519081527f7af0ac740036ffb1c97b03697859d729e80a44ae5030543d64971c313565ab4d90602001610f27565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561192a81611a1a565b600180547fffffffffffffffffffffff0000000000000000000000000000000000000000ff1661010073ffffffffffffffffffffffffffffffffffffffff8516908102919091179091556040519081527f1399be28223800f8669b3ba5f8721d9fc16fc4e8d0bbf98378791c8c5a3015e090602001610f27565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217756119ce81611a1a565b63ffffffff841660009081526003602052604090206119ee908484612de3565b5050505050565b600082815260208190526040902060010154611a1081611a1a565b610ade838361206f565b6112568133612134565b73ffffffffffffffffffffffffffffffffffffffff8316611a4957610ade82826121ec565b610ade8383836122f2565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061079357507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614610793565b611af3612360565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b611b726123cf565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33611b40565b7f74845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bca82148015611c1e575060008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16155b15611c7d5760018054601590611c56907501000000000000000000000000000000000000000000900467ffffffffffffffff16613c91565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b610941828261243b565b60408051605180825260808201909252606091611cb59160009160208201818036833701905050600061252b565b905090565b611d026040518060a00160405280606081526020016060815260200160608152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001606081525090565b6040805160a0810182528481526020808201879052825160008082529181018452919283019190611d55565b6040805180820190915260008082526020820152815260200190600190039081611d2e5790505b50815260006020808301829052604080518082018252878152820192835280516024810188905292511515604480850191909152815180850390910181526064909301815290820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f97a657c90000000000000000000000000000000000000000000000000000000017905290910152949350505050565b67ffffffffffffffff821660009081526007602052604081208054611e1190613444565b80601f0160208091040260200160405190810160405280929190818152602001828054611e3d90613444565b8015611e8a5780601f10611e5f57610100808354040283529160200191611e8a565b820191906000526020600020905b815481529060010190602001808311611e6d57829003601f168201915b505050505090508080519060200120828051906020012014610ade5782826040517f0b4f78c20000000000000000000000000000000000000000000000000000000081526004016111de929190613cb8565b6000806000611eeb858561255a565b9250925092508273ffffffffffffffffffffffffffffffffffffffff16630223536e838367ffffffffffffffff6040518463ffffffff1660e01b8152600401611f3693929190613cdb565b600060405180830381600087803b158015611f5057600080fd5b505af1158015611f64573d6000803e3d6000fd5b505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260046020908152604080832063ffffffff8516845290915290205480610793576040517ff25127e600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015263ffffffff831660248201526044016111de565b606061200e84848461252b565b949350505050565b4781811015610ade576120298330612629565b504781811015610ade576040517f6079581f00000000000000000000000000000000000000000000000000000000815260048101829052602481018390526044016111de565b7f74845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bca821480156120cb575060008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff165b1561212a5760018054601590612103907501000000000000000000000000000000000000000000900467ffffffffffffffff16613d0e565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b61094182826127a0565b60008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff166109415761217281612857565b61217d836020612876565b60405160200161218e929190613d50565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290527f08c379a00000000000000000000000000000000000000000000000000000000082526111de916004016133be565b73ffffffffffffffffffffffffffffffffffffffff8216612239576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114612293576040519150601f19603f3d011682016040523d82523d6000602084013e612298565b606091505b5050905080610ade576040517f465bc83400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602481018390526044016111de565b73ffffffffffffffffffffffffffffffffffffffff821661233f576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ade73ffffffffffffffffffffffffffffffffffffffff84168383612ac0565b60015460ff16156123cd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016111de565b565b60015460ff166123cd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016111de565b60008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff166109415760008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff85168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556124cd3390565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b606083828460405160200161254293929190613dd1565b60405160208183030381529060405290509392505050565b600060608161256b60516040613dfe565b84146125a3576040517ff1d10e0d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6125c06125b4602060008789613e11565b6125bd91613e3b565b90565b92506125d0604060208688613e11565b6125d991613e3b565b90506125e88460408188613e11565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509598929750929550909350505050565b6040517ffaaebd2100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff84169063faaebd2190602401602060405180830381865afa158015612696573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126ba91906136a1565b90508015610ade576040517ffd9be52200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301526024820183905284169063fd9be52290604401600060405180830381600087803b15801561273257600080fd5b505af1158015612746573d6000803e3d6000fd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8088168252861660208201529081018490527f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb92506060019050610e81565b60008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16156109415760008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b606061079373ffffffffffffffffffffffffffffffffffffffff831660145b60606000612885836002613e77565b612890906002613dfe565b67ffffffffffffffff8111156128a8576128a8613807565b6040519080825280601f01601f1916602001820160405280156128d2576020820181803683370190505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110612909576129096136ba565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f78000000000000000000000000000000000000000000000000000000000000008160018151811061296c5761296c6136ba565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060006129a8846002613e77565b6129b3906001613dfe565b90505b6001811115612a50577f303132333435363738396162636465660000000000000000000000000000000085600f16601081106129f4576129f46136ba565b1a60f81b828281518110612a0a57612a0a6136ba565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060049490941c93612a4981613e8e565b90506129b6565b508315612ab9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016111de565b9392505050565b6040805173ffffffffffffffffffffffffffffffffffffffff848116602483015260448083018590528351808403909101815260649092018352602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905283518085019094528084527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656490840152610ade92869291600091612b8b918516908490612c38565b9050805160001480612bac575080806020019051810190612bac9190613ec3565b610ade576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016111de565b606061200e8484600085856000808673ffffffffffffffffffffffffffffffffffffffff168587604051612c6c9190613ee0565b60006040518083038185875af1925050503d8060008114612ca9576040519150601f19603f3d011682016040523d82523d6000602084013e612cae565b606091505b5091509150612cbf87838387612cca565b979650505050505050565b60608315612d60578251600003612d595773ffffffffffffffffffffffffffffffffffffffff85163b612d59576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016111de565b508161200e565b61200e8383815115612d755781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111de91906133be565b508054612db590613444565b6000825580601f10612dc5575050565b601f0160209004906000526020600020908101906112569190612e8c565b82805482825590600052602060002090601f01602090048101928215612e7c5791602002820160005b83821115612e4d57833560ff1683826101000a81548160ff021916908360ff1602179055509260200192600101602081600001049283019260010302612e0c565b8015612e7a5782816101000a81549060ff0219169055600101602081600001049283019260010302612e4d565b505b50612e88929150612e8c565b5090565b5b80821115612e885760008155600101612e8d565b803573ffffffffffffffffffffffffffffffffffffffff81168114610ab457600080fd5b600080600060608486031215612eda57600080fd5b612ee384612ea1565b9250612ef160208501612ea1565b9150604084013590509250925092565b600060208284031215612f1357600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114612ab957600080fd5b801515811461125657600080fd5b600060208284031215612f6357600080fd5b8135612ab981612f43565b600060208284031215612f8057600080fd5b5035919050565b803563ffffffff81168114610ab457600080fd5b600060208284031215612fad57600080fd5b612ab982612f87565b6020808252825182820181905260009190848201906040850190845b81811015612ff157835160ff1683529284019291840191600101612fd2565b50909695505050505050565b60006020828403121561300f57600080fd5b612ab982612ea1565b6000806040838503121561302b57600080fd5b8235915061303b60208401612ea1565b90509250929050565b803567ffffffffffffffff81168114610ab457600080fd5b60008083601f84011261306e57600080fd5b50813567ffffffffffffffff81111561308657600080fd5b60208301915083602082850101111561309e57600080fd5b9250929050565b6000806000806000608086880312156130bd57600080fd5b6130c686612f87565b94506130d460208701613044565b93506130e260408701612ea1565b9250606086013567ffffffffffffffff8111156130fe57600080fd5b61310a8882890161305c565b969995985093965092949392505050565b6000806040838503121561312e57600080fd5b61313783612ea1565b915061303b60208401612f87565b6000806020838503121561315857600080fd5b823567ffffffffffffffff8082111561317057600080fd5b818501915085601f83011261318457600080fd5b81358181111561319357600080fd5b8660206060830285010111156131a857600080fd5b60209290920196919550909350505050565b60008083601f8401126131cc57600080fd5b50813567ffffffffffffffff8111156131e457600080fd5b6020830191508360208260051b850101111561309e57600080fd5b6000806020838503121561321257600080fd5b823567ffffffffffffffff81111561322957600080fd5b613235858286016131ba565b90969095509350505050565b600060a0828403121561325357600080fd5b50919050565b60006020828403121561326b57600080fd5b813567ffffffffffffffff81111561328257600080fd5b61200e84828501613241565b6000806000604084860312156132a357600080fd5b833567ffffffffffffffff808211156132bb57600080fd5b6132c787838801613241565b945060208601359150808211156132dd57600080fd5b506132ea8682870161305c565b9497909650939450505050565b60005b838110156133125781810151838201526020016132fa565b50506000910152565b600081518084526133338160208601602086016132f7565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b67ffffffffffffffff8516815261ffff84166020820152608060408201526000613392608083018561331b565b905082606083015295945050505050565b6000602082840312156133b557600080fd5b612ab982613044565b602081526000612ab9602083018461331b565b803561ffff81168114610ab457600080fd5b6000602082840312156133f557600080fd5b612ab9826133d1565b60008060006040848603121561341357600080fd5b61341c84612f87565b9250602084013567ffffffffffffffff81111561343857600080fd5b6132ea868287016131ba565b600181811c9082168061345857607f821691505b602082108103613253577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000815160a084526134a660a085018261331b565b9050602080840151858303828701526134bf838261331b565b60408681015188830389830152805180845290850195509092506000918401905b8083101561351f578551805173ffffffffffffffffffffffffffffffffffffffff168352850151858301529484019460019290920191908301906134e0565b5060608701519450613549606089018673ffffffffffffffffffffffffffffffffffffffff169052565b608087015194508781036080890152613562818661331b565b98975050505050505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b600061010063ffffffff8951168352602089015167ffffffffffffffff808216602086015273ffffffffffffffffffffffffffffffffffffffff60408c015116604086015260608b0151915061ffff8083166060870152836080870152818b5116848701528060208c015116610120870152505050506040870151608061014084015261364861018084018261331b565b9050606088015161016084015282810360a08401526136678188613491565b905082810360c084015261367c81868861356e565b915050612cbf60e083018473ffffffffffffffffffffffffffffffffffffffff169052565b6000602082840312156136b357600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020808252818101839052600090604080840186845b878110156137575773ffffffffffffffffffffffffffffffffffffffff61372583612ea1565b16835263ffffffff613738868401612f87565b16838601528184013584840152606092830192909101906001016136ff565b5090979650505050505050565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6183360301811261379857600080fd5b9190910192915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126137d757600080fd5b83018035915067ffffffffffffffff8211156137f257600080fd5b60200191503681900382131561309e57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f821115610ade576000816000526020600020601f850160051c8101602086101561385f5750805b601f850160051c820191505b8181101561387e5782815560010161386b565b505050505050565b67ffffffffffffffff83111561389e5761389e613807565b6138b2836138ac8354613444565b83613836565b6000601f84116001811461390457600085156138ce5750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b1783556119ee565b6000838152602090207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0861690835b828110156139535786850135825560209485019460019092019101613933565b508682101561398e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b0183555050505050565b815167ffffffffffffffff8111156139ba576139ba613807565b6139ce816139c88454613444565b84613836565b602080601f831160018114613a2157600084156139eb5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b17855561387e565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b82811015613a6e57888601518255948401946001909101908401613a4f565b5085821015613aaa57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b60208082528181018390526000906040808401600586901b8501820187855b88811015613c0d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc088840301845281357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff618b3603018112613b3a57600080fd5b8a0160a063ffffffff613b4c83612f87565b16855261ffff613b5d8984016133d1565b1688860152613b6d878301613044565b67ffffffffffffffff908116868901526060838101359087015260809081840135368590037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1018112613bbf57600080fd5b90930189810193903581811115613bd557600080fd5b803603851315613be457600080fd5b8383890152613bf6848901828761356e565b988b01989750505093880193505050600101613ad9565b509098975050505050505050565b60008060408385031215613c2e57600080fd5b505080516020909101519092909150565b67ffffffffffffffff8316815260406020820152600061200e6040830184613491565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff808316818103613cae57613cae613c62565b6001019392505050565b67ffffffffffffffff8316815260406020820152600061200e604083018461331b565b606081526000613cee606083018661331b565b905083602083015267ffffffffffffffff83166040830152949350505050565b600067ffffffffffffffff821680613d2857613d28613c62565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0192915050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351613d888160178501602088016132f7565b7f206973206d697373696e6720726f6c65200000000000000000000000000000006017918401918201528351613dc58160288401602088016132f7565b01602801949350505050565b83815282602082015260008251613def8160408501602087016132f7565b91909101604001949350505050565b8082018082111561079357610793613c62565b60008085851115613e2157600080fd5b83861115613e2e57600080fd5b5050820193919092039150565b80356020831015610793577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b1692915050565b808202811582820484141761079357610793613c62565b600081613e9d57613e9d613c62565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b600060208284031215613ed557600080fd5b8151612ab981612f43565b600082516137988184602087016132f756fea26469706673582212200226055293f5c30027748b5fe02188089946a9f46fc60c5de9cc862f670c11a764736f6c63430008160033",
740
1059
  "linkReferences": {},
741
1060
  "deployedLinkReferences": {}
742
1061
  }