aboutsummaryrefslogtreecommitdiffstats
path: root/packages/migrations/artifacts/2.0.0/ERC721Proxy.json
blob: 8ed5029e47f8368878173ebde569fcd839bc4811 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
{
    "schemaVersion": "2.0.0",
    "contractName": "ERC721Proxy",
    "compilerOutput": {
        "abi": [
            {
                "constant": false,
                "inputs": [
                    {
                        "name": "target",
                        "type": "address"
                    }
                ],
                "name": "addAuthorizedAddress",
                "outputs": [],
                "payable": false,
                "stateMutability": "nonpayable",
                "type": "function"
            },
            {
                "constant": true,
                "inputs": [
                    {
                        "name": "",
                        "type": "uint256"
                    }
                ],
                "name": "authorities",
                "outputs": [
                    {
                        "name": "",
                        "type": "address"
                    }
                ],
                "payable": false,
                "stateMutability": "view",
                "type": "function"
            },
            {
                "constant": false,
                "inputs": [
                    {
                        "name": "assetMetadata",
                        "type": "bytes[]"
                    },
                    {
                        "name": "from",
                        "type": "address[]"
                    },
                    {
                        "name": "to",
                        "type": "address[]"
                    },
                    {
                        "name": "amounts",
                        "type": "uint256[]"
                    }
                ],
                "name": "batchTransferFrom",
                "outputs": [],
                "payable": false,
                "stateMutability": "nonpayable",
                "type": "function"
            },
            {
                "constant": false,
                "inputs": [
                    {
                        "name": "target",
                        "type": "address"
                    }
                ],
                "name": "removeAuthorizedAddress",
                "outputs": [],
                "payable": false,
                "stateMutability": "nonpayable",
                "type": "function"
            },
            {
                "constant": true,
                "inputs": [],
                "name": "owner",
                "outputs": [
                    {
                        "name": "",
                        "type": "address"
                    }
                ],
                "payable": false,
                "stateMutability": "view",
                "type": "function"
            },
            {
                "constant": false,
                "inputs": [
                    {
                        "name": "target",
                        "type": "address"
                    },
                    {
                        "name": "index",
                        "type": "uint256"
                    }
                ],
                "name": "removeAuthorizedAddressAtIndex",
                "outputs": [],
                "payable": false,
                "stateMutability": "nonpayable",
                "type": "function"
            },
            {
                "constant": false,
                "inputs": [
                    {
                        "name": "assetMetadata",
                        "type": "bytes"
                    },
                    {
                        "name": "from",
                        "type": "address"
                    },
                    {
                        "name": "to",
                        "type": "address"
                    },
                    {
                        "name": "amount",
                        "type": "uint256"
                    }
                ],
                "name": "transferFrom",
                "outputs": [],
                "payable": false,
                "stateMutability": "nonpayable",
                "type": "function"
            },
            {
                "constant": true,
                "inputs": [],
                "name": "getProxyId",
                "outputs": [
                    {
                        "name": "",
                        "type": "uint8"
                    }
                ],
                "payable": false,
                "stateMutability": "view",
                "type": "function"
            },
            {
                "constant": true,
                "inputs": [
                    {
                        "name": "",
                        "type": "address"
                    }
                ],
                "name": "authorized",
                "outputs": [
                    {
                        "name": "",
                        "type": "bool"
                    }
                ],
                "payable": false,
                "stateMutability": "view",
                "type": "function"
            },
            {
                "constant": true,
                "inputs": [],
                "name": "getAuthorizedAddresses",
                "outputs": [
                    {
                        "name": "",
                        "type": "address[]"
                    }
                ],
                "payable": false,
                "stateMutability": "view",
                "type": "function"
            },
            {
                "constant": false,
                "inputs": [
                    {
                        "name": "newOwner",
                        "type": "address"
                    }
                ],
                "name": "transferOwnership",
                "outputs": [],
                "payable": false,
                "stateMutability": "nonpayable",
                "type": "function"
            },
            {
                "anonymous": false,
                "inputs": [
                    {
                        "indexed": true,
                        "name": "target",
                        "type": "address"
                    },
                    {
                        "indexed": true,
                        "name": "caller",
                        "type": "address"
                    }
                ],
                "name": "AuthorizedAddressAdded",
                "type": "event"
            },
            {
                "anonymous": false,
                "inputs": [
                    {
                        "indexed": true,
                        "name": "target",
                        "type": "address"
                    },
                    {
                        "indexed": true,
                        "name": "caller",
                        "type": "address"
                    }
                ],
                "name": "AuthorizedAddressRemoved",
                "type": "event"
            }
        ],
        "evm": {
            "bytecode": {
                "linkReferences": {},
                "object": "0x6080604052336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611dc1806100536000396000f3006080604052600436106100af576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806342f1181e146100b4578063494503d4146100dd578063563c875d1461011a57806370712939146101435780638da5cb5b1461016c5780639ad2674414610197578063a85e59e4146101c0578063ae25532e146101e9578063b918161114610214578063d39de6e914610251578063f2fde38b1461027c575b600080fd5b3480156100c057600080fd5b506100db60048036036100d691908101906117df565b6102a5565b005b3480156100e957600080fd5b5061010460048036036100ff9190810190611987565b61053f565b6040516101119190611ada565b60405180910390f35b34801561012657600080fd5b50610141600480360361013c9190810190611844565b61057d565b005b34801561014f57600080fd5b5061016a600480360361016591908101906117df565b6106f7565b005b34801561017857600080fd5b50610181610a68565b60405161018e9190611ada565b60405180910390f35b3480156101a357600080fd5b506101be60048036036101b99190810190611808565b610a8d565b005b3480156101cc57600080fd5b506101e760048036036101e29190810190611907565b610d9e565b005b3480156101f557600080fd5b506101fe610ed1565b60405161020b9190611bab565b60405180910390f35b34801561022057600080fd5b5061023b600480360361023691908101906117df565b610eda565b6040516102489190611b4e565b60405180910390f35b34801561025d57600080fd5b50610266610efa565b6040516102739190611b2c565b60405180910390f35b34801561028857600080fd5b506102a3600480360361029e91908101906117df565b610f88565b005b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610336576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161032d90611b8b565b60405180910390fd5b600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615606060405190810160405280602681526020017f546172676574206d757374206e6f7420616c726561647920626520617574686f81526020017f72697a65642e0000000000000000000000000000000000000000000000000000815250901515610424576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161041b9190611b69565b60405180910390fd5b5060018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060028190806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f3147867c59d17e8fa9d522465651d44aae0a9e38f902f3475b97e58072f0ed4c60405160405180910390a350565b60028181548110151561054e57fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16606060405190810160405280602a81526020017f53656e646572206e6f7420617574686f72697a656420746f2063616c6c20746881526020017f6973206d6574686f642e0000000000000000000000000000000000000000000081525090151561066c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106639190611b69565b60405180910390fd5b50600090505b84518110156106f0576106e3858281518110151561068c57fe5b9060200190602002015185838151811015156106a457fe5b9060200190602002015185848151811015156106bc57fe5b9060200190602002015185858151811015156106d457fe5b90602001906020020151611093565b8080600101915050610672565b5050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561078a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078190611b8b565b60405180910390fd5b600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16606060405190810160405280602281526020017f5461726765742061646472657373206d75737420626520617574686f72697a6581526020017f642e000000000000000000000000000000000000000000000000000000000000815250901515610877576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086e9190611b69565b60405180910390fd5b50600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff0219169055600090505b600280549050811015610a0a578173ffffffffffffffffffffffffffffffffffffffff166002828154811015156108ff57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156109fd57600260016002805490500381548110151561095d57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660028281548110151561099757fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060016002818180549050039150816109f79190611544565b50610a0a565b80806001019150506108cc565b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f1f32c1b084e2de0713b8fb16bd46bb9df710a3dbeae2f3ca93af46e016dcc6b060405160405180910390a35050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6002805490508110606060405190810160405280602781526020017f53706563696669656420617272617920696e646578206973206f7574206f662081526020017f626f756e64732e00000000000000000000000000000000000000000000000000815250901515610b35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2c9190611b69565b60405180910390fd5b508173ffffffffffffffffffffffffffffffffffffffff16600282815481101515610b5c57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614606060405190810160405280603581526020017f4164647265737320666f756e6420617420696e64657820646f6573206e6f742081526020017f6d617463682074617267657420616464726573732e0000000000000000000000815250901515610c3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c359190611b69565b60405180910390fd5b50600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff02191690556002600160028054905003815481101515610ca557fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600282815481101515610cdf57fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600281818054905003915081610d3f9190611544565b503373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f1f32c1b084e2de0713b8fb16bd46bb9df710a3dbeae2f3ca93af46e016dcc6b060405160405180910390a35050565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16606060405190810160405280602a81526020017f53656e646572206e6f7420617574686f72697a656420746f2063616c6c20746881526020017f6973206d6574686f642e00000000000000000000000000000000000000000000815250901515610e8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e829190611b69565b60405180910390fd5b50610eca85858080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050848484611093565b5050505050565b60006002905090565b60016020528060005260406000206000915054906101000a900460ff1681565b60606002805480602002602001604051908101604052809291908181526020018280548015610f7e57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311610f34575b5050505050905090565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611019576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101090611b8b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151561109057806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b60008060008651925060358314606060405190810160405280602281526020017f4d65746164617461206d75737420686176652061206c656e677468206f66203581526020017f332e000000000000000000000000000000000000000000000000000000000000815250901515611140576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111379190611b69565b60405180910390fd5b50600260ff16876001850381518110151561115757fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027f0100000000000000000000000000000000000000000000000000000000000000900460ff1614606060405190810160405280603281526020017f50726f787920696420696e206d6574616461746120646f6573206e6f74206d6181526020017f74636820746869732070726f78792069642e0000000000000000000000000000815250901515611269576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112609190611b69565b60405180910390fd5b50600184146040805190810160405280601d81526020017f5472616e7366657220616d6f756e74206d75737420657175616c20312e0000008152509015156112e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112de9190611b69565b60405180910390fd5b506112f3876000611396565b915061130087601461146c565b90508173ffffffffffffffffffffffffffffffffffffffff166323b872dd8787846040518463ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040161135b93929190611af5565b600060405180830381600087803b15801561137557600080fd5b505af1158015611389573d6000803e3d6000fd5b5050505050505050505050565b60006014820183511015606060405190810160405280602b81526020017f4c656e677468206d7573742062652067726561746572207468616e206f72206581526020017f7175616c20746f2032302e000000000000000000000000000000000000000000815250901515611440576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114379190611b69565b60405180910390fd5b5060148201915073ffffffffffffffffffffffffffffffffffffffff8284015116905080905092915050565b60006114788383611484565b60019004905092915050565b60006020820183511015606060405190810160405280602b81526020017f4c656e677468206d7573742062652067726561746572207468616e206f72206581526020017f7175616c20746f2033322e00000000000000000000000000000000000000000081525090151561152e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115259190611b69565b60405180910390fd5b5060208201915081830151905080905092915050565b81548183558181111561156b5781836000526020600020918201910161156a9190611570565b5b505050565b61159291905b8082111561158e576000816000905550600101611576565b5090565b90565b60006115a18235611d0a565b905092915050565b600082601f83011215156115bc57600080fd5b81356115cf6115ca82611bf3565b611bc6565b915081818352602084019350602081019050838560208402820111156115f457600080fd5b60005b83811015611624578161160a8882611595565b8452602084019350602083019250506001810190506115f7565b5050505092915050565b600082601f830112151561164157600080fd5b813561165461164f82611c1b565b611bc6565b9150818183526020840193506020810190508360005b8381101561169a57813586016116808882611775565b84526020840193506020830192505060018101905061166a565b5050505092915050565b600082601f83011215156116b757600080fd5b81356116ca6116c582611c43565b611bc6565b915081818352602084019350602081019050838560208402820111156116ef57600080fd5b60005b8381101561171f578161170588826117cb565b8452602084019350602083019250506001810190506116f2565b5050505092915050565b60008083601f840112151561173d57600080fd5b8235905067ffffffffffffffff81111561175657600080fd5b60208301915083600182028301111561176e57600080fd5b9250929050565b600082601f830112151561178857600080fd5b813561179b61179682611c6b565b611bc6565b915080825260208301602083018583830111156117b757600080fd5b6117c2838284611d34565b50505092915050565b60006117d78235611d2a565b905092915050565b6000602082840312156117f157600080fd5b60006117ff84828501611595565b91505092915050565b6000806040838503121561181b57600080fd5b600061182985828601611595565b925050602061183a858286016117cb565b9150509250929050565b6000806000806080858703121561185a57600080fd5b600085013567ffffffffffffffff81111561187457600080fd5b6118808782880161162e565b945050602085013567ffffffffffffffff81111561189d57600080fd5b6118a9878288016115a9565b935050604085013567ffffffffffffffff8111156118c657600080fd5b6118d2878288016115a9565b925050606085013567ffffffffffffffff8111156118ef57600080fd5b6118fb878288016116a4565b91505092959194509250565b60008060008060006080868803121561191f57600080fd5b600086013567ffffffffffffffff81111561193957600080fd5b61194588828901611729565b9550955050602061195888828901611595565b935050604061196988828901611595565b925050606061197a888289016117cb565b9150509295509295909350565b60006020828403121561199957600080fd5b60006119a7848285016117cb565b91505092915050565b6119b981611cc7565b82525050565b60006119ca82611ca4565b8084526020840193506119dc83611c97565b60005b82811015611a0e576119f28683516119b0565b6119fb82611cba565b91506020860195506001810190506119df565b50849250505092915050565b611a2381611ce7565b82525050565b6000611a3482611caf565b808452611a48816020860160208601611d43565b611a5181611d76565b602085010191505092915050565b6000603382527f4f6e6c7920636f6e7472616374206f776e657220697320616c6c6f776564207460208301527f6f2063616c6c2074686973206d6574686f642e000000000000000000000000006040830152606082019050919050565b611ac581611cf3565b82525050565b611ad481611cfd565b82525050565b6000602082019050611aef60008301846119b0565b92915050565b6000606082019050611b0a60008301866119b0565b611b1760208301856119b0565b611b246040830184611abc565b949350505050565b60006020820190508181036000830152611b4681846119bf565b905092915050565b6000602082019050611b636000830184611a1a565b92915050565b60006020820190508181036000830152611b838184611a29565b905092915050565b60006020820190508181036000830152611ba481611a5f565b9050919050565b6000602082019050611bc06000830184611acb565b92915050565b6000604051905081810181811067ffffffffffffffff82111715611be957600080fd5b8060405250919050565b600067ffffffffffffffff821115611c0a57600080fd5b602082029050602081019050919050565b600067ffffffffffffffff821115611c3257600080fd5b602082029050602081019050919050565b600067ffffffffffffffff821115611c5a57600080fd5b602082029050602081019050919050565b600067ffffffffffffffff821115611c8257600080fd5b601f19601f8301169050602081019050919050565b6000602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60008115159050919050565b6000819050919050565b600060ff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015611d61578082015181840152602081019050611d46565b83811115611d70576000848401525b50505050565b6000601f19601f83011690509190505600a265627a7a72305820cc979042f431e2e16586cc2cd097710e28f10af5417aff17cb4742b0da1e64196c6578706572696d656e74616cf50037",
                "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLER PUSH1 0x0 DUP1 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH2 0x1DC1 DUP1 PUSH2 0x53 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN STOP PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0xAF JUMPI PUSH1 0x0 CALLDATALOAD PUSH29 0x100000000000000000000000000000000000000000000000000000000 SWAP1 DIV PUSH4 0xFFFFFFFF AND DUP1 PUSH4 0x42F1181E EQ PUSH2 0xB4 JUMPI DUP1 PUSH4 0x494503D4 EQ PUSH2 0xDD JUMPI DUP1 PUSH4 0x563C875D EQ PUSH2 0x11A JUMPI DUP1 PUSH4 0x70712939 EQ PUSH2 0x143 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x16C JUMPI DUP1 PUSH4 0x9AD26744 EQ PUSH2 0x197 JUMPI DUP1 PUSH4 0xA85E59E4 EQ PUSH2 0x1C0 JUMPI DUP1 PUSH4 0xAE25532E EQ PUSH2 0x1E9 JUMPI DUP1 PUSH4 0xB9181611 EQ PUSH2 0x214 JUMPI DUP1 PUSH4 0xD39DE6E9 EQ PUSH2 0x251 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x27C JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xC0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xDB PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH2 0xD6 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x17DF JUMP JUMPDEST PUSH2 0x2A5 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xE9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x104 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH2 0xFF SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x1987 JUMP JUMPDEST PUSH2 0x53F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x111 SWAP2 SWAP1 PUSH2 0x1ADA JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x126 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x141 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH2 0x13C SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x1844 JUMP JUMPDEST PUSH2 0x57D JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x14F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x16A PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH2 0x165 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x17DF JUMP JUMPDEST PUSH2 0x6F7 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x178 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x181 PUSH2 0xA68 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x18E SWAP2 SWAP1 PUSH2 0x1ADA JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1A3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1BE PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH2 0x1B9 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x1808 JUMP JUMPDEST PUSH2 0xA8D JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1CC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1E7 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH2 0x1E2 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x1907 JUMP JUMPDEST PUSH2 0xD9E JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1F5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1FE PUSH2 0xED1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x20B SWAP2 SWAP1 PUSH2 0x1BAB JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x220 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x23B PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH2 0x236 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x17DF JUMP JUMPDEST PUSH2 0xEDA JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x248 SWAP2 SWAP1 PUSH2 0x1B4E JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x25D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x266 PUSH2 0xEFA JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x273 SWAP2 SWAP1 PUSH2 0x1B2C JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x288 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2A3 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH2 0x29E SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x17DF JUMP JUMPDEST PUSH2 0xF88 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 DUP1 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO ISZERO PUSH2 0x336 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x32D SWAP1 PUSH2 0x1B8B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x0 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH1 0x60 PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x546172676574206D757374206E6F7420616C726561647920626520617574686F DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x72697A65642E0000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 ISZERO ISZERO PUSH2 0x424 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x41B SWAP2 SWAP1 PUSH2 0x1B69 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP PUSH1 0x1 DUP1 PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH1 0xFF MUL NOT AND SWAP1 DUP4 ISZERO ISZERO MUL OR SWAP1 SSTORE POP PUSH1 0x2 DUP2 SWAP1 DUP1 PUSH1 0x1 DUP2 SLOAD ADD DUP1 DUP3 SSTORE DUP1 SWAP2 POP POP SWAP1 PUSH1 0x1 DUP3 SUB SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 SWAP1 SWAP2 SWAP3 SWAP1 SWAP2 SWAP1 SWAP2 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP POP CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x3147867C59D17E8FA9D522465651D44AAE0A9E38F902F3475B97E58072F0ED4C PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP JUMP JUMPDEST PUSH1 0x2 DUP2 DUP2 SLOAD DUP2 LT ISZERO ISZERO PUSH2 0x54E JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 SWAP2 POP SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x0 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xFF AND PUSH1 0x60 PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2A DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x53656E646572206E6F7420617574686F72697A656420746F2063616C6C207468 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x6973206D6574686F642E00000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 ISZERO ISZERO PUSH2 0x66C JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x663 SWAP2 SWAP1 PUSH2 0x1B69 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP PUSH1 0x0 SWAP1 POP JUMPDEST DUP5 MLOAD DUP2 LT ISZERO PUSH2 0x6F0 JUMPI PUSH2 0x6E3 DUP6 DUP3 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x68C JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD DUP6 DUP4 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x6A4 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD DUP6 DUP5 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x6BC JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD DUP6 DUP6 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x6D4 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD PUSH2 0x1093 JUMP JUMPDEST DUP1 DUP1 PUSH1 0x1 ADD SWAP2 POP POP PUSH2 0x672 JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO ISZERO PUSH2 0x78A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x781 SWAP1 PUSH2 0x1B8B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xFF AND PUSH1 0x60 PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x5461726765742061646472657373206D75737420626520617574686F72697A65 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x642E000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 ISZERO ISZERO PUSH2 0x877 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x86E SWAP2 SWAP1 PUSH2 0x1B69 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD SWAP1 PUSH1 0xFF MUL NOT AND SWAP1 SSTORE PUSH1 0x0 SWAP1 POP JUMPDEST PUSH1 0x2 DUP1 SLOAD SWAP1 POP DUP2 LT ISZERO PUSH2 0xA0A JUMPI DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x2 DUP3 DUP2 SLOAD DUP2 LT ISZERO ISZERO PUSH2 0x8FF JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x9FD JUMPI PUSH1 0x2 PUSH1 0x1 PUSH1 0x2 DUP1 SLOAD SWAP1 POP SUB DUP2 SLOAD DUP2 LT ISZERO ISZERO PUSH2 0x95D JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x2 DUP3 DUP2 SLOAD DUP2 LT ISZERO ISZERO PUSH2 0x997 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH1 0x1 PUSH1 0x2 DUP2 DUP2 DUP1 SLOAD SWAP1 POP SUB SWAP2 POP DUP2 PUSH2 0x9F7 SWAP2 SWAP1 PUSH2 0x1544 JUMP JUMPDEST POP PUSH2 0xA0A JUMP JUMPDEST DUP1 DUP1 PUSH1 0x1 ADD SWAP2 POP POP PUSH2 0x8CC JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x1F32C1B084E2DE0713B8FB16BD46BB9DF710A3DBEAE2F3CA93AF46E016DCC6B0 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x2 DUP1 SLOAD SWAP1 POP DUP2 LT PUSH1 0x60 PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x27 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x53706563696669656420617272617920696E646578206973206F7574206F6620 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x626F756E64732E00000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 ISZERO ISZERO PUSH2 0xB35 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xB2C SWAP2 SWAP1 PUSH2 0x1B69 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x2 DUP3 DUP2 SLOAD DUP2 LT ISZERO ISZERO PUSH2 0xB5C JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH1 0x60 PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x35 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x4164647265737320666F756E6420617420696E64657820646F6573206E6F7420 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x6D617463682074617267657420616464726573732E0000000000000000000000 DUP2 MSTORE POP SWAP1 ISZERO ISZERO PUSH2 0xC3E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xC35 SWAP2 SWAP1 PUSH2 0x1B69 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD SWAP1 PUSH1 0xFF MUL NOT AND SWAP1 SSTORE PUSH1 0x2 PUSH1 0x1 PUSH1 0x2 DUP1 SLOAD SWAP1 POP SUB DUP2 SLOAD DUP2 LT ISZERO ISZERO PUSH2 0xCA5 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x2 DUP3 DUP2 SLOAD DUP2 LT ISZERO ISZERO PUSH2 0xCDF JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH1 0x1 PUSH1 0x2 DUP2 DUP2 DUP1 SLOAD SWAP1 POP SUB SWAP2 POP DUP2 PUSH2 0xD3F SWAP2 SWAP1 PUSH2 0x1544 JUMP JUMPDEST POP CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x1F32C1B084E2DE0713B8FB16BD46BB9DF710A3DBEAE2F3CA93AF46E016DCC6B0 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xFF AND PUSH1 0x60 PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2A DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x53656E646572206E6F7420617574686F72697A656420746F2063616C6C207468 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x6973206D6574686F642E00000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 ISZERO ISZERO PUSH2 0xE8B JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE82 SWAP2 SWAP1 PUSH2 0x1B69 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP PUSH2 0xECA DUP6 DUP6 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY DUP3 ADD SWAP2 POP POP POP POP POP POP DUP5 DUP5 DUP5 PUSH2 0x1093 JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x2 SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 MSTORE DUP1 PUSH1 0x0 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP2 POP SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x2 DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0xF7E JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0xF34 JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO ISZERO PUSH2 0x1019 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1010 SWAP1 PUSH2 0x1B8B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO ISZERO PUSH2 0x1090 JUMPI DUP1 PUSH1 0x0 DUP1 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP7 MLOAD SWAP3 POP PUSH1 0x35 DUP4 EQ PUSH1 0x60 PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x4D65746164617461206D75737420686176652061206C656E677468206F662035 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x332E000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 ISZERO ISZERO PUSH2 0x1140 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1137 SWAP2 SWAP1 PUSH2 0x1B69 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP PUSH1 0x2 PUSH1 0xFF AND DUP8 PUSH1 0x1 DUP6 SUB DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x1157 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD ADD MLOAD PUSH32 0x100000000000000000000000000000000000000000000000000000000000000 SWAP1 DIV PUSH32 0x100000000000000000000000000000000000000000000000000000000000000 MUL PUSH32 0x100000000000000000000000000000000000000000000000000000000000000 SWAP1 DIV PUSH1 0xFF AND EQ PUSH1 0x60 PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x32 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x50726F787920696420696E206D6574616461746120646F6573206E6F74206D61 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x74636820746869732070726F78792069642E0000000000000000000000000000 DUP2 MSTORE POP SWAP1 ISZERO ISZERO PUSH2 0x1269 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1260 SWAP2 SWAP1 PUSH2 0x1B69 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP PUSH1 0x1 DUP5 EQ PUSH1 0x40 DUP1 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1D DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x5472616E7366657220616D6F756E74206D75737420657175616C20312E000000 DUP2 MSTORE POP SWAP1 ISZERO ISZERO PUSH2 0x12E7 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x12DE SWAP2 SWAP1 PUSH2 0x1B69 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP PUSH2 0x12F3 DUP8 PUSH1 0x0 PUSH2 0x1396 JUMP JUMPDEST SWAP2 POP PUSH2 0x1300 DUP8 PUSH1 0x14 PUSH2 0x146C JUMP JUMPDEST SWAP1 POP DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x23B872DD DUP8 DUP8 DUP5 PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH29 0x100000000000000000000000000000000000000000000000000000000 MUL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x135B SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1AF5 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1375 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1389 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x14 DUP3 ADD DUP4 MLOAD LT ISZERO PUSH1 0x60 PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2B DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x4C656E677468206D7573742062652067726561746572207468616E206F722065 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x7175616C20746F2032302E000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 ISZERO ISZERO PUSH2 0x1440 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1437 SWAP2 SWAP1 PUSH2 0x1B69 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP PUSH1 0x14 DUP3 ADD SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 DUP5 ADD MLOAD AND SWAP1 POP DUP1 SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1478 DUP4 DUP4 PUSH2 0x1484 JUMP JUMPDEST PUSH1 0x1 SWAP1 DIV SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD DUP4 MLOAD LT ISZERO PUSH1 0x60 PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2B DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x4C656E677468206D7573742062652067726561746572207468616E206F722065 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x7175616C20746F2033322E000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 ISZERO ISZERO PUSH2 0x152E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1525 SWAP2 SWAP1 PUSH2 0x1B69 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP PUSH1 0x20 DUP3 ADD SWAP2 POP DUP2 DUP4 ADD MLOAD SWAP1 POP DUP1 SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP2 SLOAD DUP2 DUP4 SSTORE DUP2 DUP2 GT ISZERO PUSH2 0x156B JUMPI DUP2 DUP4 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x156A SWAP2 SWAP1 PUSH2 0x1570 JUMP JUMPDEST JUMPDEST POP POP POP JUMP JUMPDEST PUSH2 0x1592 SWAP2 SWAP1 JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x158E JUMPI PUSH1 0x0 DUP2 PUSH1 0x0 SWAP1 SSTORE POP PUSH1 0x1 ADD PUSH2 0x1576 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x15A1 DUP3 CALLDATALOAD PUSH2 0x1D0A JUMP JUMPDEST SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT ISZERO ISZERO PUSH2 0x15BC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x15CF PUSH2 0x15CA DUP3 PUSH2 0x1BF3 JUMP JUMPDEST PUSH2 0x1BC6 JUMP JUMPDEST SWAP2 POP DUP2 DUP2 DUP4 MSTORE PUSH1 0x20 DUP5 ADD SWAP4 POP PUSH1 0x20 DUP2 ADD SWAP1 POP DUP4 DUP6 PUSH1 0x20 DUP5 MUL DUP3 ADD GT ISZERO PUSH2 0x15F4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1624 JUMPI DUP2 PUSH2 0x160A DUP9 DUP3 PUSH2 0x1595 JUMP JUMPDEST DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP4 POP PUSH1 0x20 DUP4 ADD SWAP3 POP POP PUSH1 0x1 DUP2 ADD SWAP1 POP PUSH2 0x15F7 JUMP JUMPDEST POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT ISZERO ISZERO PUSH2 0x1641 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x1654 PUSH2 0x164F DUP3 PUSH2 0x1C1B JUMP JUMPDEST PUSH2 0x1BC6 JUMP JUMPDEST SWAP2 POP DUP2 DUP2 DUP4 MSTORE PUSH1 0x20 DUP5 ADD SWAP4 POP PUSH1 0x20 DUP2 ADD SWAP1 POP DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x169A JUMPI DUP2 CALLDATALOAD DUP7 ADD PUSH2 0x1680 DUP9 DUP3 PUSH2 0x1775 JUMP JUMPDEST DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP4 POP PUSH1 0x20 DUP4 ADD SWAP3 POP POP PUSH1 0x1 DUP2 ADD SWAP1 POP PUSH2 0x166A JUMP JUMPDEST POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT ISZERO ISZERO PUSH2 0x16B7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x16CA PUSH2 0x16C5 DUP3 PUSH2 0x1C43 JUMP JUMPDEST PUSH2 0x1BC6 JUMP JUMPDEST SWAP2 POP DUP2 DUP2 DUP4 MSTORE PUSH1 0x20 DUP5 ADD SWAP4 POP PUSH1 0x20 DUP2 ADD SWAP1 POP DUP4 DUP6 PUSH1 0x20 DUP5 MUL DUP3 ADD GT ISZERO PUSH2 0x16EF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x171F JUMPI DUP2 PUSH2 0x1705 DUP9 DUP3 PUSH2 0x17CB JUMP JUMPDEST DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP4 POP PUSH1 0x20 DUP4 ADD SWAP3 POP POP PUSH1 0x1 DUP2 ADD SWAP1 POP PUSH2 0x16F2 JUMP JUMPDEST POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT ISZERO ISZERO PUSH2 0x173D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD SWAP1 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1756 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x1 DUP3 MUL DUP4 ADD GT ISZERO PUSH2 0x176E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT ISZERO ISZERO PUSH2 0x1788 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x179B PUSH2 0x1796 DUP3 PUSH2 0x1C6B JUMP JUMPDEST PUSH2 0x1BC6 JUMP JUMPDEST SWAP2 POP DUP1 DUP3 MSTORE PUSH1 0x20 DUP4 ADD PUSH1 0x20 DUP4 ADD DUP6 DUP4 DUP4 ADD GT ISZERO PUSH2 0x17B7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x17C2 DUP4 DUP3 DUP5 PUSH2 0x1D34 JUMP JUMPDEST POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x17D7 DUP3 CALLDATALOAD PUSH2 0x1D2A JUMP JUMPDEST SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x17F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x17FF DUP5 DUP3 DUP6 ADD PUSH2 0x1595 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x181B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x1829 DUP6 DUP3 DUP7 ADD PUSH2 0x1595 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x183A DUP6 DUP3 DUP7 ADD PUSH2 0x17CB JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x185A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1874 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1880 DUP8 DUP3 DUP9 ADD PUSH2 0x162E JUMP JUMPDEST SWAP5 POP POP PUSH1 0x20 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x189D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x18A9 DUP8 DUP3 DUP9 ADD PUSH2 0x15A9 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x18C6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x18D2 DUP8 DUP3 DUP9 ADD PUSH2 0x15A9 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x60 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x18EF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x18FB DUP8 DUP3 DUP9 ADD PUSH2 0x16A4 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x80 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x191F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP7 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1939 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1945 DUP9 DUP3 DUP10 ADD PUSH2 0x1729 JUMP JUMPDEST SWAP6 POP SWAP6 POP POP PUSH1 0x20 PUSH2 0x1958 DUP9 DUP3 DUP10 ADD PUSH2 0x1595 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x40 PUSH2 0x1969 DUP9 DUP3 DUP10 ADD PUSH2 0x1595 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x60 PUSH2 0x197A DUP9 DUP3 DUP10 ADD PUSH2 0x17CB JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1999 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x19A7 DUP5 DUP3 DUP6 ADD PUSH2 0x17CB JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x19B9 DUP2 PUSH2 0x1CC7 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x19CA DUP3 PUSH2 0x1CA4 JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP4 POP PUSH2 0x19DC DUP4 PUSH2 0x1C97 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x1A0E JUMPI PUSH2 0x19F2 DUP7 DUP4 MLOAD PUSH2 0x19B0 JUMP JUMPDEST PUSH2 0x19FB DUP3 PUSH2 0x1CBA JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP7 ADD SWAP6 POP PUSH1 0x1 DUP2 ADD SWAP1 POP PUSH2 0x19DF JUMP JUMPDEST POP DUP5 SWAP3 POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x1A23 DUP2 PUSH2 0x1CE7 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1A34 DUP3 PUSH2 0x1CAF JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH2 0x1A48 DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x1D43 JUMP JUMPDEST PUSH2 0x1A51 DUP2 PUSH2 0x1D76 JUMP JUMPDEST PUSH1 0x20 DUP6 ADD ADD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x33 DUP3 MSTORE PUSH32 0x4F6E6C7920636F6E7472616374206F776E657220697320616C6C6F7765642074 PUSH1 0x20 DUP4 ADD MSTORE PUSH32 0x6F2063616C6C2074686973206D6574686F642E00000000000000000000000000 PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x1AC5 DUP2 PUSH2 0x1CF3 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH2 0x1AD4 DUP2 PUSH2 0x1CFD JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x1AEF PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x19B0 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP3 ADD SWAP1 POP PUSH2 0x1B0A PUSH1 0x0 DUP4 ADD DUP7 PUSH2 0x19B0 JUMP JUMPDEST PUSH2 0x1B17 PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x19B0 JUMP JUMPDEST PUSH2 0x1B24 PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0x1ABC JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x1B46 DUP2 DUP5 PUSH2 0x19BF JUMP JUMPDEST SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x1B63 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x1A1A JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x1B83 DUP2 DUP5 PUSH2 0x1A29 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x1BA4 DUP2 PUSH2 0x1A5F JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x1BC0 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x1ACB JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD SWAP1 POP DUP2 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR ISZERO PUSH2 0x1BE9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH1 0x40 MSTORE POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x1C0A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP3 MUL SWAP1 POP PUSH1 0x20 DUP2 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x1C32 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP3 MUL SWAP1 POP PUSH1 0x20 DUP2 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x1C5A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP3 MUL SWAP1 POP PUSH1 0x20 DUP2 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x1C82 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND SWAP1 POP PUSH1 0x20 DUP2 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO ISZERO SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0xFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST DUP3 DUP2 DUP4 CALLDATACOPY PUSH1 0x0 DUP4 DUP4 ADD MSTORE POP POP POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1D61 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x1D46 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x1D70 JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND SWAP1 POP SWAP2 SWAP1 POP JUMP STOP LOG2 PUSH6 0x627A7A723058 KECCAK256 0xcc SWAP8 SWAP1 TIMESTAMP DELEGATECALL BALANCE 0xe2 0xe1 PUSH6 0x86CC2CD09771 0xe 0x28 CALL EXP 0xf5 COINBASE PUSH27 0xFF17CB4742B0DA1E64196C6578706572696D656E74616CF5003700 ",
                "sourceMap": "802:1874:0:-;;;371:10:12;363:5;;:18;;;;;;;;;;;;;;;;;;802:1874:0;;;;;;"
            },
            "deployedBytecode": {
                "linkReferences": {},
                "object": "0x6080604052600436106100af576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806342f1181e146100b4578063494503d4146100dd578063563c875d1461011a57806370712939146101435780638da5cb5b1461016c5780639ad2674414610197578063a85e59e4146101c0578063ae25532e146101e9578063b918161114610214578063d39de6e914610251578063f2fde38b1461027c575b600080fd5b3480156100c057600080fd5b506100db60048036036100d691908101906117df565b6102a5565b005b3480156100e957600080fd5b5061010460048036036100ff9190810190611987565b61053f565b6040516101119190611ada565b60405180910390f35b34801561012657600080fd5b50610141600480360361013c9190810190611844565b61057d565b005b34801561014f57600080fd5b5061016a600480360361016591908101906117df565b6106f7565b005b34801561017857600080fd5b50610181610a68565b60405161018e9190611ada565b60405180910390f35b3480156101a357600080fd5b506101be60048036036101b99190810190611808565b610a8d565b005b3480156101cc57600080fd5b506101e760048036036101e29190810190611907565b610d9e565b005b3480156101f557600080fd5b506101fe610ed1565b60405161020b9190611bab565b60405180910390f35b34801561022057600080fd5b5061023b600480360361023691908101906117df565b610eda565b6040516102489190611b4e565b60405180910390f35b34801561025d57600080fd5b50610266610efa565b6040516102739190611b2c565b60405180910390f35b34801561028857600080fd5b506102a3600480360361029e91908101906117df565b610f88565b005b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610336576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161032d90611b8b565b60405180910390fd5b600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615606060405190810160405280602681526020017f546172676574206d757374206e6f7420616c726561647920626520617574686f81526020017f72697a65642e0000000000000000000000000000000000000000000000000000815250901515610424576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161041b9190611b69565b60405180910390fd5b5060018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060028190806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f3147867c59d17e8fa9d522465651d44aae0a9e38f902f3475b97e58072f0ed4c60405160405180910390a350565b60028181548110151561054e57fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16606060405190810160405280602a81526020017f53656e646572206e6f7420617574686f72697a656420746f2063616c6c20746881526020017f6973206d6574686f642e0000000000000000000000000000000000000000000081525090151561066c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106639190611b69565b60405180910390fd5b50600090505b84518110156106f0576106e3858281518110151561068c57fe5b9060200190602002015185838151811015156106a457fe5b9060200190602002015185848151811015156106bc57fe5b9060200190602002015185858151811015156106d457fe5b90602001906020020151611093565b8080600101915050610672565b5050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561078a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078190611b8b565b60405180910390fd5b600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16606060405190810160405280602281526020017f5461726765742061646472657373206d75737420626520617574686f72697a6581526020017f642e000000000000000000000000000000000000000000000000000000000000815250901515610877576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086e9190611b69565b60405180910390fd5b50600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff0219169055600090505b600280549050811015610a0a578173ffffffffffffffffffffffffffffffffffffffff166002828154811015156108ff57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156109fd57600260016002805490500381548110151561095d57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660028281548110151561099757fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060016002818180549050039150816109f79190611544565b50610a0a565b80806001019150506108cc565b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f1f32c1b084e2de0713b8fb16bd46bb9df710a3dbeae2f3ca93af46e016dcc6b060405160405180910390a35050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6002805490508110606060405190810160405280602781526020017f53706563696669656420617272617920696e646578206973206f7574206f662081526020017f626f756e64732e00000000000000000000000000000000000000000000000000815250901515610b35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2c9190611b69565b60405180910390fd5b508173ffffffffffffffffffffffffffffffffffffffff16600282815481101515610b5c57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614606060405190810160405280603581526020017f4164647265737320666f756e6420617420696e64657820646f6573206e6f742081526020017f6d617463682074617267657420616464726573732e0000000000000000000000815250901515610c3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c359190611b69565b60405180910390fd5b50600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff02191690556002600160028054905003815481101515610ca557fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600282815481101515610cdf57fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600281818054905003915081610d3f9190611544565b503373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f1f32c1b084e2de0713b8fb16bd46bb9df710a3dbeae2f3ca93af46e016dcc6b060405160405180910390a35050565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16606060405190810160405280602a81526020017f53656e646572206e6f7420617574686f72697a656420746f2063616c6c20746881526020017f6973206d6574686f642e00000000000000000000000000000000000000000000815250901515610e8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e829190611b69565b60405180910390fd5b50610eca85858080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050848484611093565b5050505050565b60006002905090565b60016020528060005260406000206000915054906101000a900460ff1681565b60606002805480602002602001604051908101604052809291908181526020018280548015610f7e57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311610f34575b5050505050905090565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611019576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101090611b8b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151561109057806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b60008060008651925060358314606060405190810160405280602281526020017f4d65746164617461206d75737420686176652061206c656e677468206f66203581526020017f332e000000000000000000000000000000000000000000000000000000000000815250901515611140576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111379190611b69565b60405180910390fd5b50600260ff16876001850381518110151561115757fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027f0100000000000000000000000000000000000000000000000000000000000000900460ff1614606060405190810160405280603281526020017f50726f787920696420696e206d6574616461746120646f6573206e6f74206d6181526020017f74636820746869732070726f78792069642e0000000000000000000000000000815250901515611269576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112609190611b69565b60405180910390fd5b50600184146040805190810160405280601d81526020017f5472616e7366657220616d6f756e74206d75737420657175616c20312e0000008152509015156112e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112de9190611b69565b60405180910390fd5b506112f3876000611396565b915061130087601461146c565b90508173ffffffffffffffffffffffffffffffffffffffff166323b872dd8787846040518463ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040161135b93929190611af5565b600060405180830381600087803b15801561137557600080fd5b505af1158015611389573d6000803e3d6000fd5b5050505050505050505050565b60006014820183511015606060405190810160405280602b81526020017f4c656e677468206d7573742062652067726561746572207468616e206f72206581526020017f7175616c20746f2032302e000000000000000000000000000000000000000000815250901515611440576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114379190611b69565b60405180910390fd5b5060148201915073ffffffffffffffffffffffffffffffffffffffff8284015116905080905092915050565b60006114788383611484565b60019004905092915050565b60006020820183511015606060405190810160405280602b81526020017f4c656e677468206d7573742062652067726561746572207468616e206f72206581526020017f7175616c20746f2033322e00000000000000000000000000000000000000000081525090151561152e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115259190611b69565b60405180910390fd5b5060208201915081830151905080905092915050565b81548183558181111561156b5781836000526020600020918201910161156a9190611570565b5b505050565b61159291905b8082111561158e576000816000905550600101611576565b5090565b90565b60006115a18235611d0a565b905092915050565b600082601f83011215156115bc57600080fd5b81356115cf6115ca82611bf3565b611bc6565b915081818352602084019350602081019050838560208402820111156115f457600080fd5b60005b83811015611624578161160a8882611595565b8452602084019350602083019250506001810190506115f7565b5050505092915050565b600082601f830112151561164157600080fd5b813561165461164f82611c1b565b611bc6565b9150818183526020840193506020810190508360005b8381101561169a57813586016116808882611775565b84526020840193506020830192505060018101905061166a565b5050505092915050565b600082601f83011215156116b757600080fd5b81356116ca6116c582611c43565b611bc6565b915081818352602084019350602081019050838560208402820111156116ef57600080fd5b60005b8381101561171f578161170588826117cb565b8452602084019350602083019250506001810190506116f2565b5050505092915050565b60008083601f840112151561173d57600080fd5b8235905067ffffffffffffffff81111561175657600080fd5b60208301915083600182028301111561176e57600080fd5b9250929050565b600082601f830112151561178857600080fd5b813561179b61179682611c6b565b611bc6565b915080825260208301602083018583830111156117b757600080fd5b6117c2838284611d34565b50505092915050565b60006117d78235611d2a565b905092915050565b6000602082840312156117f157600080fd5b60006117ff84828501611595565b91505092915050565b6000806040838503121561181b57600080fd5b600061182985828601611595565b925050602061183a858286016117cb565b9150509250929050565b6000806000806080858703121561185a57600080fd5b600085013567ffffffffffffffff81111561187457600080fd5b6118808782880161162e565b945050602085013567ffffffffffffffff81111561189d57600080fd5b6118a9878288016115a9565b935050604085013567ffffffffffffffff8111156118c657600080fd5b6118d2878288016115a9565b925050606085013567ffffffffffffffff8111156118ef57600080fd5b6118fb878288016116a4565b91505092959194509250565b60008060008060006080868803121561191f57600080fd5b600086013567ffffffffffffffff81111561193957600080fd5b61194588828901611729565b9550955050602061195888828901611595565b935050604061196988828901611595565b925050606061197a888289016117cb565b9150509295509295909350565b60006020828403121561199957600080fd5b60006119a7848285016117cb565b91505092915050565b6119b981611cc7565b82525050565b60006119ca82611ca4565b8084526020840193506119dc83611c97565b60005b82811015611a0e576119f28683516119b0565b6119fb82611cba565b91506020860195506001810190506119df565b50849250505092915050565b611a2381611ce7565b82525050565b6000611a3482611caf565b808452611a48816020860160208601611d43565b611a5181611d76565b602085010191505092915050565b6000603382527f4f6e6c7920636f6e7472616374206f776e657220697320616c6c6f776564207460208301527f6f2063616c6c2074686973206d6574686f642e000000000000000000000000006040830152606082019050919050565b611ac581611cf3565b82525050565b611ad481611cfd565b82525050565b6000602082019050611aef60008301846119b0565b92915050565b6000606082019050611b0a60008301866119b0565b611b1760208301856119b0565b611b246040830184611abc565b949350505050565b60006020820190508181036000830152611b4681846119bf565b905092915050565b6000602082019050611b636000830184611a1a565b92915050565b60006020820190508181036000830152611b838184611a29565b905092915050565b60006020820190508181036000830152611ba481611a5f565b9050919050565b6000602082019050611bc06000830184611acb565b92915050565b6000604051905081810181811067ffffffffffffffff82111715611be957600080fd5b8060405250919050565b600067ffffffffffffffff821115611c0a57600080fd5b602082029050602081019050919050565b600067ffffffffffffffff821115611c3257600080fd5b602082029050602081019050919050565b600067ffffffffffffffff821115611c5a57600080fd5b602082029050602081019050919050565b600067ffffffffffffffff821115611c8257600080fd5b601f19601f8301169050602081019050919050565b6000602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60008115159050919050565b6000819050919050565b600060ff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015611d61578082015181840152602081019050611d46565b83811115611d70576000848401525b50505050565b6000601f19601f83011690509190505600a265627a7a72305820cc979042f431e2e16586cc2cd097710e28f10af5417aff17cb4742b0da1e64196c6578706572696d656e74616cf50037",
                "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0xAF JUMPI PUSH1 0x0 CALLDATALOAD PUSH29 0x100000000000000000000000000000000000000000000000000000000 SWAP1 DIV PUSH4 0xFFFFFFFF AND DUP1 PUSH4 0x42F1181E EQ PUSH2 0xB4 JUMPI DUP1 PUSH4 0x494503D4 EQ PUSH2 0xDD JUMPI DUP1 PUSH4 0x563C875D EQ PUSH2 0x11A JUMPI DUP1 PUSH4 0x70712939 EQ PUSH2 0x143 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x16C JUMPI DUP1 PUSH4 0x9AD26744 EQ PUSH2 0x197 JUMPI DUP1 PUSH4 0xA85E59E4 EQ PUSH2 0x1C0 JUMPI DUP1 PUSH4 0xAE25532E EQ PUSH2 0x1E9 JUMPI DUP1 PUSH4 0xB9181611 EQ PUSH2 0x214 JUMPI DUP1 PUSH4 0xD39DE6E9 EQ PUSH2 0x251 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x27C JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xC0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xDB PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH2 0xD6 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x17DF JUMP JUMPDEST PUSH2 0x2A5 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xE9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x104 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH2 0xFF SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x1987 JUMP JUMPDEST PUSH2 0x53F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x111 SWAP2 SWAP1 PUSH2 0x1ADA JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x126 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x141 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH2 0x13C SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x1844 JUMP JUMPDEST PUSH2 0x57D JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x14F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x16A PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH2 0x165 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x17DF JUMP JUMPDEST PUSH2 0x6F7 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x178 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x181 PUSH2 0xA68 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x18E SWAP2 SWAP1 PUSH2 0x1ADA JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1A3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1BE PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH2 0x1B9 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x1808 JUMP JUMPDEST PUSH2 0xA8D JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1CC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1E7 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH2 0x1E2 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x1907 JUMP JUMPDEST PUSH2 0xD9E JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1F5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1FE PUSH2 0xED1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x20B SWAP2 SWAP1 PUSH2 0x1BAB JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x220 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x23B PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH2 0x236 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x17DF JUMP JUMPDEST PUSH2 0xEDA JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x248 SWAP2 SWAP1 PUSH2 0x1B4E JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x25D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x266 PUSH2 0xEFA JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x273 SWAP2 SWAP1 PUSH2 0x1B2C JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x288 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2A3 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH2 0x29E SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x17DF JUMP JUMPDEST PUSH2 0xF88 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 DUP1 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO ISZERO PUSH2 0x336 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x32D SWAP1 PUSH2 0x1B8B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x0 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH1 0x60 PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x546172676574206D757374206E6F7420616C726561647920626520617574686F DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x72697A65642E0000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 ISZERO ISZERO PUSH2 0x424 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x41B SWAP2 SWAP1 PUSH2 0x1B69 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP PUSH1 0x1 DUP1 PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH1 0xFF MUL NOT AND SWAP1 DUP4 ISZERO ISZERO MUL OR SWAP1 SSTORE POP PUSH1 0x2 DUP2 SWAP1 DUP1 PUSH1 0x1 DUP2 SLOAD ADD DUP1 DUP3 SSTORE DUP1 SWAP2 POP POP SWAP1 PUSH1 0x1 DUP3 SUB SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 SWAP1 SWAP2 SWAP3 SWAP1 SWAP2 SWAP1 SWAP2 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP POP CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x3147867C59D17E8FA9D522465651D44AAE0A9E38F902F3475B97E58072F0ED4C PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP JUMP JUMPDEST PUSH1 0x2 DUP2 DUP2 SLOAD DUP2 LT ISZERO ISZERO PUSH2 0x54E JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 SWAP2 POP SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x0 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xFF AND PUSH1 0x60 PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2A DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x53656E646572206E6F7420617574686F72697A656420746F2063616C6C207468 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x6973206D6574686F642E00000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 ISZERO ISZERO PUSH2 0x66C JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x663 SWAP2 SWAP1 PUSH2 0x1B69 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP PUSH1 0x0 SWAP1 POP JUMPDEST DUP5 MLOAD DUP2 LT ISZERO PUSH2 0x6F0 JUMPI PUSH2 0x6E3 DUP6 DUP3 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x68C JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD DUP6 DUP4 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x6A4 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD DUP6 DUP5 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x6BC JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD DUP6 DUP6 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x6D4 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD PUSH2 0x1093 JUMP JUMPDEST DUP1 DUP1 PUSH1 0x1 ADD SWAP2 POP POP PUSH2 0x672 JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO ISZERO PUSH2 0x78A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x781 SWAP1 PUSH2 0x1B8B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xFF AND PUSH1 0x60 PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x5461726765742061646472657373206D75737420626520617574686F72697A65 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x642E000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 ISZERO ISZERO PUSH2 0x877 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x86E SWAP2 SWAP1 PUSH2 0x1B69 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD SWAP1 PUSH1 0xFF MUL NOT AND SWAP1 SSTORE PUSH1 0x0 SWAP1 POP JUMPDEST PUSH1 0x2 DUP1 SLOAD SWAP1 POP DUP2 LT ISZERO PUSH2 0xA0A JUMPI DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x2 DUP3 DUP2 SLOAD DUP2 LT ISZERO ISZERO PUSH2 0x8FF JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x9FD JUMPI PUSH1 0x2 PUSH1 0x1 PUSH1 0x2 DUP1 SLOAD SWAP1 POP SUB DUP2 SLOAD DUP2 LT ISZERO ISZERO PUSH2 0x95D JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x2 DUP3 DUP2 SLOAD DUP2 LT ISZERO ISZERO PUSH2 0x997 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH1 0x1 PUSH1 0x2 DUP2 DUP2 DUP1 SLOAD SWAP1 POP SUB SWAP2 POP DUP2 PUSH2 0x9F7 SWAP2 SWAP1 PUSH2 0x1544 JUMP JUMPDEST POP PUSH2 0xA0A JUMP JUMPDEST DUP1 DUP1 PUSH1 0x1 ADD SWAP2 POP POP PUSH2 0x8CC JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x1F32C1B084E2DE0713B8FB16BD46BB9DF710A3DBEAE2F3CA93AF46E016DCC6B0 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x2 DUP1 SLOAD SWAP1 POP DUP2 LT PUSH1 0x60 PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x27 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x53706563696669656420617272617920696E646578206973206F7574206F6620 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x626F756E64732E00000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 ISZERO ISZERO PUSH2 0xB35 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xB2C SWAP2 SWAP1 PUSH2 0x1B69 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x2 DUP3 DUP2 SLOAD DUP2 LT ISZERO ISZERO PUSH2 0xB5C JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH1 0x60 PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x35 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x4164647265737320666F756E6420617420696E64657820646F6573206E6F7420 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x6D617463682074617267657420616464726573732E0000000000000000000000 DUP2 MSTORE POP SWAP1 ISZERO ISZERO PUSH2 0xC3E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xC35 SWAP2 SWAP1 PUSH2 0x1B69 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD SWAP1 PUSH1 0xFF MUL NOT AND SWAP1 SSTORE PUSH1 0x2 PUSH1 0x1 PUSH1 0x2 DUP1 SLOAD SWAP1 POP SUB DUP2 SLOAD DUP2 LT ISZERO ISZERO PUSH2 0xCA5 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x2 DUP3 DUP2 SLOAD DUP2 LT ISZERO ISZERO PUSH2 0xCDF JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH1 0x1 PUSH1 0x2 DUP2 DUP2 DUP1 SLOAD SWAP1 POP SUB SWAP2 POP DUP2 PUSH2 0xD3F SWAP2 SWAP1 PUSH2 0x1544 JUMP JUMPDEST POP CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x1F32C1B084E2DE0713B8FB16BD46BB9DF710A3DBEAE2F3CA93AF46E016DCC6B0 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xFF AND PUSH1 0x60 PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2A DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x53656E646572206E6F7420617574686F72697A656420746F2063616C6C207468 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x6973206D6574686F642E00000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 ISZERO ISZERO PUSH2 0xE8B JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE82 SWAP2 SWAP1 PUSH2 0x1B69 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP PUSH2 0xECA DUP6 DUP6 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY DUP3 ADD SWAP2 POP POP POP POP POP POP DUP5 DUP5 DUP5 PUSH2 0x1093 JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x2 SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 MSTORE DUP1 PUSH1 0x0 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP2 POP SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x2 DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0xF7E JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0xF34 JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO ISZERO PUSH2 0x1019 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1010 SWAP1 PUSH2 0x1B8B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO ISZERO PUSH2 0x1090 JUMPI DUP1 PUSH1 0x0 DUP1 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP7 MLOAD SWAP3 POP PUSH1 0x35 DUP4 EQ PUSH1 0x60 PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x4D65746164617461206D75737420686176652061206C656E677468206F662035 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x332E000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 ISZERO ISZERO PUSH2 0x1140 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1137 SWAP2 SWAP1 PUSH2 0x1B69 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP PUSH1 0x2 PUSH1 0xFF AND DUP8 PUSH1 0x1 DUP6 SUB DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x1157 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD ADD MLOAD PUSH32 0x100000000000000000000000000000000000000000000000000000000000000 SWAP1 DIV PUSH32 0x100000000000000000000000000000000000000000000000000000000000000 MUL PUSH32 0x100000000000000000000000000000000000000000000000000000000000000 SWAP1 DIV PUSH1 0xFF AND EQ PUSH1 0x60 PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x32 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x50726F787920696420696E206D6574616461746120646F6573206E6F74206D61 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x74636820746869732070726F78792069642E0000000000000000000000000000 DUP2 MSTORE POP SWAP1 ISZERO ISZERO PUSH2 0x1269 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1260 SWAP2 SWAP1 PUSH2 0x1B69 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP PUSH1 0x1 DUP5 EQ PUSH1 0x40 DUP1 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1D DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x5472616E7366657220616D6F756E74206D75737420657175616C20312E000000 DUP2 MSTORE POP SWAP1 ISZERO ISZERO PUSH2 0x12E7 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x12DE SWAP2 SWAP1 PUSH2 0x1B69 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP PUSH2 0x12F3 DUP8 PUSH1 0x0 PUSH2 0x1396 JUMP JUMPDEST SWAP2 POP PUSH2 0x1300 DUP8 PUSH1 0x14 PUSH2 0x146C JUMP JUMPDEST SWAP1 POP DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x23B872DD DUP8 DUP8 DUP5 PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH29 0x100000000000000000000000000000000000000000000000000000000 MUL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x135B SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1AF5 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1375 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1389 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x14 DUP3 ADD DUP4 MLOAD LT ISZERO PUSH1 0x60 PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2B DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x4C656E677468206D7573742062652067726561746572207468616E206F722065 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x7175616C20746F2032302E000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 ISZERO ISZERO PUSH2 0x1440 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1437 SWAP2 SWAP1 PUSH2 0x1B69 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP PUSH1 0x14 DUP3 ADD SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 DUP5 ADD MLOAD AND SWAP1 POP DUP1 SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1478 DUP4 DUP4 PUSH2 0x1484 JUMP JUMPDEST PUSH1 0x1 SWAP1 DIV SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD DUP4 MLOAD LT ISZERO PUSH1 0x60 PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2B DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x4C656E677468206D7573742062652067726561746572207468616E206F722065 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x7175616C20746F2033322E000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 ISZERO ISZERO PUSH2 0x152E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1525 SWAP2 SWAP1 PUSH2 0x1B69 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP PUSH1 0x20 DUP3 ADD SWAP2 POP DUP2 DUP4 ADD MLOAD SWAP1 POP DUP1 SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP2 SLOAD DUP2 DUP4 SSTORE DUP2 DUP2 GT ISZERO PUSH2 0x156B JUMPI DUP2 DUP4 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x156A SWAP2 SWAP1 PUSH2 0x1570 JUMP JUMPDEST JUMPDEST POP POP POP JUMP JUMPDEST PUSH2 0x1592 SWAP2 SWAP1 JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x158E JUMPI PUSH1 0x0 DUP2 PUSH1 0x0 SWAP1 SSTORE POP PUSH1 0x1 ADD PUSH2 0x1576 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x15A1 DUP3 CALLDATALOAD PUSH2 0x1D0A JUMP JUMPDEST SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT ISZERO ISZERO PUSH2 0x15BC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x15CF PUSH2 0x15CA DUP3 PUSH2 0x1BF3 JUMP JUMPDEST PUSH2 0x1BC6 JUMP JUMPDEST SWAP2 POP DUP2 DUP2 DUP4 MSTORE PUSH1 0x20 DUP5 ADD SWAP4 POP PUSH1 0x20 DUP2 ADD SWAP1 POP DUP4 DUP6 PUSH1 0x20 DUP5 MUL DUP3 ADD GT ISZERO PUSH2 0x15F4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1624 JUMPI DUP2 PUSH2 0x160A DUP9 DUP3 PUSH2 0x1595 JUMP JUMPDEST DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP4 POP PUSH1 0x20 DUP4 ADD SWAP3 POP POP PUSH1 0x1 DUP2 ADD SWAP1 POP PUSH2 0x15F7 JUMP JUMPDEST POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT ISZERO ISZERO PUSH2 0x1641 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x1654 PUSH2 0x164F DUP3 PUSH2 0x1C1B JUMP JUMPDEST PUSH2 0x1BC6 JUMP JUMPDEST SWAP2 POP DUP2 DUP2 DUP4 MSTORE PUSH1 0x20 DUP5 ADD SWAP4 POP PUSH1 0x20 DUP2 ADD SWAP1 POP DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x169A JUMPI DUP2 CALLDATALOAD DUP7 ADD PUSH2 0x1680 DUP9 DUP3 PUSH2 0x1775 JUMP JUMPDEST DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP4 POP PUSH1 0x20 DUP4 ADD SWAP3 POP POP PUSH1 0x1 DUP2 ADD SWAP1 POP PUSH2 0x166A JUMP JUMPDEST POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT ISZERO ISZERO PUSH2 0x16B7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x16CA PUSH2 0x16C5 DUP3 PUSH2 0x1C43 JUMP JUMPDEST PUSH2 0x1BC6 JUMP JUMPDEST SWAP2 POP DUP2 DUP2 DUP4 MSTORE PUSH1 0x20 DUP5 ADD SWAP4 POP PUSH1 0x20 DUP2 ADD SWAP1 POP DUP4 DUP6 PUSH1 0x20 DUP5 MUL DUP3 ADD GT ISZERO PUSH2 0x16EF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x171F JUMPI DUP2 PUSH2 0x1705 DUP9 DUP3 PUSH2 0x17CB JUMP JUMPDEST DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP4 POP PUSH1 0x20 DUP4 ADD SWAP3 POP POP PUSH1 0x1 DUP2 ADD SWAP1 POP PUSH2 0x16F2 JUMP JUMPDEST POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT ISZERO ISZERO PUSH2 0x173D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD SWAP1 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1756 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x1 DUP3 MUL DUP4 ADD GT ISZERO PUSH2 0x176E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT ISZERO ISZERO PUSH2 0x1788 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x179B PUSH2 0x1796 DUP3 PUSH2 0x1C6B JUMP JUMPDEST PUSH2 0x1BC6 JUMP JUMPDEST SWAP2 POP DUP1 DUP3 MSTORE PUSH1 0x20 DUP4 ADD PUSH1 0x20 DUP4 ADD DUP6 DUP4 DUP4 ADD GT ISZERO PUSH2 0x17B7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x17C2 DUP4 DUP3 DUP5 PUSH2 0x1D34 JUMP JUMPDEST POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x17D7 DUP3 CALLDATALOAD PUSH2 0x1D2A JUMP JUMPDEST SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x17F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x17FF DUP5 DUP3 DUP6 ADD PUSH2 0x1595 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x181B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x1829 DUP6 DUP3 DUP7 ADD PUSH2 0x1595 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x183A DUP6 DUP3 DUP7 ADD PUSH2 0x17CB JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x185A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1874 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1880 DUP8 DUP3 DUP9 ADD PUSH2 0x162E JUMP JUMPDEST SWAP5 POP POP PUSH1 0x20 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x189D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x18A9 DUP8 DUP3 DUP9 ADD PUSH2 0x15A9 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x18C6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x18D2 DUP8 DUP3 DUP9 ADD PUSH2 0x15A9 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x60 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x18EF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x18FB DUP8 DUP3 DUP9 ADD PUSH2 0x16A4 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x80 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x191F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP7 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1939 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1945 DUP9 DUP3 DUP10 ADD PUSH2 0x1729 JUMP JUMPDEST SWAP6 POP SWAP6 POP POP PUSH1 0x20 PUSH2 0x1958 DUP9 DUP3 DUP10 ADD PUSH2 0x1595 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x40 PUSH2 0x1969 DUP9 DUP3 DUP10 ADD PUSH2 0x1595 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x60 PUSH2 0x197A DUP9 DUP3 DUP10 ADD PUSH2 0x17CB JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1999 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x19A7 DUP5 DUP3 DUP6 ADD PUSH2 0x17CB JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x19B9 DUP2 PUSH2 0x1CC7 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x19CA DUP3 PUSH2 0x1CA4 JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP4 POP PUSH2 0x19DC DUP4 PUSH2 0x1C97 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x1A0E JUMPI PUSH2 0x19F2 DUP7 DUP4 MLOAD PUSH2 0x19B0 JUMP JUMPDEST PUSH2 0x19FB DUP3 PUSH2 0x1CBA JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP7 ADD SWAP6 POP PUSH1 0x1 DUP2 ADD SWAP1 POP PUSH2 0x19DF JUMP JUMPDEST POP DUP5 SWAP3 POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x1A23 DUP2 PUSH2 0x1CE7 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1A34 DUP3 PUSH2 0x1CAF JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH2 0x1A48 DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x1D43 JUMP JUMPDEST PUSH2 0x1A51 DUP2 PUSH2 0x1D76 JUMP JUMPDEST PUSH1 0x20 DUP6 ADD ADD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x33 DUP3 MSTORE PUSH32 0x4F6E6C7920636F6E7472616374206F776E657220697320616C6C6F7765642074 PUSH1 0x20 DUP4 ADD MSTORE PUSH32 0x6F2063616C6C2074686973206D6574686F642E00000000000000000000000000 PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x1AC5 DUP2 PUSH2 0x1CF3 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH2 0x1AD4 DUP2 PUSH2 0x1CFD JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x1AEF PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x19B0 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP3 ADD SWAP1 POP PUSH2 0x1B0A PUSH1 0x0 DUP4 ADD DUP7 PUSH2 0x19B0 JUMP JUMPDEST PUSH2 0x1B17 PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x19B0 JUMP JUMPDEST PUSH2 0x1B24 PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0x1ABC JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x1B46 DUP2 DUP5 PUSH2 0x19BF JUMP JUMPDEST SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x1B63 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x1A1A JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x1B83 DUP2 DUP5 PUSH2 0x1A29 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x1BA4 DUP2 PUSH2 0x1A5F JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x1BC0 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x1ACB JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD SWAP1 POP DUP2 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR ISZERO PUSH2 0x1BE9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH1 0x40 MSTORE POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x1C0A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP3 MUL SWAP1 POP PUSH1 0x20 DUP2 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x1C32 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP3 MUL SWAP1 POP PUSH1 0x20 DUP2 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x1C5A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP3 MUL SWAP1 POP PUSH1 0x20 DUP2 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x1C82 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND SWAP1 POP PUSH1 0x20 DUP2 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO ISZERO SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0xFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST DUP3 DUP2 DUP4 CALLDATACOPY PUSH1 0x0 DUP4 DUP4 ADD MSTORE POP POP POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1D61 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x1D46 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x1D70 JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND SWAP1 POP SWAP2 SWAP1 POP JUMP STOP LOG2 PUSH6 0x627A7A723058 KECCAK256 0xcc SWAP8 SWAP1 TIMESTAMP DELEGATECALL BALANCE 0xe2 0xe1 PUSH6 0x86CC2CD09771 0xe 0x28 CALL EXP 0xf5 COINBASE PUSH27 0xFF17CB4742B0DA1E64196C6578706572696D656E74616CF5003700 ",
                "sourceMap": "802:1874:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1650:318:2;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1650:318:2;;;;;;;;;;;;;;;;;;;1535:28;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1535:28:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1696:443:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1696:443:1;;;;;;;;;;;;;;;;;;;2082:542:2;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2082:542:2;;;;;;;;;;;;;;;;;;;292:20:12;;8:9:-1;5:2;;;30:1;27;20:12;5:2;292:20:12;;;;;;;;;;;;;;;;;;;;2797:520:2;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2797:520:2;;;;;;;;;;;;;;;;;;;1042:295:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1042:295:1;;;;;;;;;;;;;;;;;;;2562:112:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2562:112:0;;;;;;;;;;;;;;;;;;;;1486:43:2;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1486:43:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3414:138;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3414:138:2;;;;;;;;;;;;;;;;;;;;566:167:12;;8:9:-1;5:2;;;30:1;27;20:12;5:2;566:167:12;;;;;;;;;;;;;;;;;;;1650:318:2;460:5:12;;;;;;;;;;;446:19;;:10;:19;;;425:117;;;;;;;;;;;;;;;;;;;;;;;;1767:10:2;:18;1778:6;1767:18;;;;;;;;;;;;;;;;;;;;;;;;;1766:19;1799:25;;;;;;;;;;;;;;;;;;;;;;;1745:89;;;;;;;;;;;;;;;;;;;;;;;;;;;1866:4;1845:10;:18;1856:6;1845:18;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;1880:11;1897:6;1880:24;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;1880:24:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1950:10;1919:42;;1942:6;1919:42;;;;;;;;;;;;1650:318;:::o;1535:28::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1696:443:1:-;1918:9;1395:10:2;:22;1406:10;1395:22;;;;;;;;;;;;;;;;;;;;;;;;;1431:21;;;;;;;;;;;;;;;;;;;;;;;1374:88;;;;;;;;;;;;;;;;;;;;;;;;;;;1930:1:1;1918:13;;1913:220;1937:13;:20;1933:1;:24;1913:220;;;1978:144;2016:13;2030:1;2016:16;;;;;;;;;;;;;;;;;;2050:4;2055:1;2050:7;;;;;;;;;;;;;;;;;;2075:2;2078:1;2075:5;;;;;;;;;;;;;;;;;;2098:7;2106:1;2098:10;;;;;;;;;;;;;;;;;;1978:20;:144::i;:::-;1959:3;;;;;;;1913:220;;;1696:443;;;;;:::o;2082:542:2:-;2315:6;460:5:12;;;;;;;;;;;446:19;;:10;:19;;;425:117;;;;;;;;;;;;;;;;;;;;;;;;2201:10:2;:18;2212:6;2201:18;;;;;;;;;;;;;;;;;;;;;;;;;2233:21;;;;;;;;;;;;;;;;;;;;;;;2180:84;;;;;;;;;;;;;;;;;;;;;;;;;;;2282:10;:18;2293:6;2282:18;;;;;;;;;;;;;;;;2275:25;;;;;;;;;;;2324:1;2315:10;;2310:249;2331:11;:18;;;;2327:1;:22;2310:249;;;2392:6;2374:24;;:11;2386:1;2374:14;;;;;;;;;;;;;;;;;;;;;;;;;;;:24;;;2370:179;;;2435:11;2468:1;2447:11;:18;;;;:22;2435:35;;;;;;;;;;;;;;;;;;;;;;;;;;;2418:11;2430:1;2418:14;;;;;;;;;;;;;;;;;;:52;;;;;;;;;;;;;;;;;;2510:1;2488:11;:23;;;;;;;;;;;;;;:::i;:::-;;2529:5;;2370:179;2351:3;;;;;;;2310:249;;;2606:10;2573:44;;2598:6;2573:44;;;;;;;;;;;;2082:542;;:::o;292:20:12:-;;;;;;;;;;;;;:::o;2797:520:2:-;2950:11;:18;;;;2942:5;:26;2982:19;;;;;;;;;;;;;;;;;;;;;;;2921:90;;;;;;;;;;;;;;;;;;;;;;;;;;;3064:6;3042:28;;:11;3054:5;3042:18;;;;;;;;;;;;;;;;;;;;;;;;;;;:28;;;3084:22;;;;;;;;;;;;;;;;;;;;;;;3021:95;;;;;;;;;;;;;;;;;;;;;;;;;;;3134:10;:18;3145:6;3134:18;;;;;;;;;;;;;;;;3127:25;;;;;;;;;;;3183:11;3216:1;3195:11;:18;;;;:22;3183:35;;;;;;;;;;;;;;;;;;;;;;;;;;;3162:11;3174:5;3162:18;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;;;;;;;;3250:1;3228:11;:23;;;;;;;;;;;;;;:::i;:::-;;3299:10;3266:44;;3291:6;3266:44;;;;;;;;;;;;2797:520;;:::o;1042:295:1:-;1395:10:2;:22;1406:10;1395:22;;;;;;;;;;;;;;;;;;;;;;;;;1431:21;;;;;;;;;;;;;;;;;;;;;;;1374:88;;;;;;;;;;;;;;;;;;;;;;;;;;;1219:111:1;1253:13;;1219:111;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1280:4;1298:2;1314:6;1219:20;:111::i;:::-;1042:295;;;;;:::o;2562:112:0:-;2631:5;941:1;2652:15;;2562:112;:::o;1486:43:2:-;;;;;;;;;;;;;;;;;;;;;;:::o;3414:138::-;3495:9;3534:11;3527:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3414:138;:::o;566:167:12:-;460:5;;;;;;;;;;;446:19;;:10;:19;;;425:117;;;;;;;;;;;;;;;;;;;;;;;;682:1;662:22;;:8;:22;;;;658:69;;;708:8;700:5;;:16;;;;;;;;;;;;;;;;;;658:69;566:167;:::o;1478:986:0:-;1696:14;2115:13;2170:15;1713:13;:20;1696:37;;1775:2;1765:6;:12;1791:23;;;;;;;;;;;;;;;;;;;;;;;1744:80;;;;;;;;;;;;;;;;;;;;;;;;;;;941:1;1856:44;;1862:13;1885:1;1876:6;:10;1862:25;;;;;;;;;;;;;;;;;;;;1856:32;;;:44;;;1914:17;;;;;;;;;;;;;;;;;;;;;;;1835:106;;;;;;;;;;;;;;;;;;;;;;;;;;;2029:1;2019:6;:11;2044:23;;;;;;;;;;;;;;;;;;1998:79;;;;;;;;;;;;;;;;;;;;;;;;;;;2131:29;2143:13;2158:1;2131:11;:29::i;:::-;2115:45;;2188:30;2200:13;2215:2;2188:11;:30::i;:::-;2170:48;;2419:5;2407:31;;;2439:4;2445:2;2449:7;2407:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2407:50:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2407:50:0;;;;1478:986;;;;;;;:::o;3710:869:10:-;3831:14;3902:2;3894:5;:10;3882:1;:8;:22;;3946;;;;;;;;;;;;;;;;;;;;;;;3861:117;;;;;;;;;;;;;;;;;;;;;;;;;;;4226:2;4217:11;;;;4497:42;4488:5;4485:1;4481:13;4475:20;4471:69;4461:79;;4566:6;4559:13;;3710:869;;;;:::o;7846:195::-;7967:14;8012:21;8024:1;8027:5;8012:11;:21::i;:::-;8004:30;;;7997:37;;7846:195;;;;:::o;6464:472::-;6585:14;6656:2;6648:5;:10;6636:1;:8;:22;;6672;;;;;;;;;;;;;;;;;;;;;;;6615:89;;;;;;;;;;;;;;;;;;;;;;;;;;;6785:2;6776:11;;;;6890:5;6887:1;6883:13;6877:20;6867:30;;6923:6;6916:13;;6464:472;;;;:::o;802:1874:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;5:118:-1:-;;72:46;110:6;97:20;72:46;;;63:55;;57:66;;;;;148:707;;265:3;258:4;250:6;246:17;242:27;235:35;232:2;;;283:1;280;273:12;232:2;320:6;307:20;342:80;357:64;414:6;357:64;;;342:80;;;333:89;;439:5;464:6;457:5;450:21;494:4;486:6;482:17;472:27;;516:4;511:3;507:14;500:21;;569:6;616:3;608:4;600:6;596:17;591:3;587:27;584:36;581:2;;;633:1;630;623:12;581:2;658:1;643:206;668:6;665:1;662:13;643:206;;;726:3;748:37;781:3;769:10;748:37;;;743:3;736:50;809:4;804:3;800:14;793:21;;837:4;832:3;828:14;821:21;;700:149;690:1;687;683:9;678:14;;643:206;;;647:14;225:630;;;;;;;;879:693;;1001:3;994:4;986:6;982:17;978:27;971:35;968:2;;;1019:1;1016;1009:12;968:2;1056:6;1043:20;1078:85;1093:69;1155:6;1093:69;;;1078:85;;;1069:94;;1180:5;1205:6;1198:5;1191:21;1235:4;1227:6;1223:17;1213:27;;1257:4;1252:3;1248:14;1241:21;;1310:6;1343:1;1328:238;1353:6;1350:1;1347:13;1328:238;;;1436:3;1423:17;1415:6;1411:30;1460:42;1498:3;1486:10;1460:42;;;1455:3;1448:55;1526:4;1521:3;1517:14;1510:21;;1554:4;1549:3;1545:14;1538:21;;1385:181;1375:1;1372;1368:9;1363:14;;1328:238;;;1332:14;961:611;;;;;;;;1598:707;;1715:3;1708:4;1700:6;1696:17;1692:27;1685:35;1682:2;;;1733:1;1730;1723:12;1682:2;1770:6;1757:20;1792:80;1807:64;1864:6;1807:64;;;1792:80;;;1783:89;;1889:5;1914:6;1907:5;1900:21;1944:4;1936:6;1932:17;1922:27;;1966:4;1961:3;1957:14;1950:21;;2019:6;2066:3;2058:4;2050:6;2046:17;2041:3;2037:27;2034:36;2031:2;;;2083:1;2080;2073:12;2031:2;2108:1;2093:206;2118:6;2115:1;2112:13;2093:206;;;2176:3;2198:37;2231:3;2219:10;2198:37;;;2193:3;2186:50;2259:4;2254:3;2250:14;2243:21;;2287:4;2282:3;2278:14;2271:21;;2150:149;2140:1;2137;2133:9;2128:14;;2093:206;;;2097:14;1675:630;;;;;;;;2327:335;;;2441:3;2434:4;2426:6;2422:17;2418:27;2411:35;2408:2;;;2459:1;2456;2449:12;2408:2;2492:6;2479:20;2469:30;;2519:18;2511:6;2508:30;2505:2;;;2551:1;2548;2541:12;2505:2;2585:4;2577:6;2573:17;2561:29;;2635:3;2628;2620:6;2616:16;2606:8;2602:31;2599:40;2596:2;;;2652:1;2649;2642:12;2596:2;2401:261;;;;;;2671:432;;2768:3;2761:4;2753:6;2749:17;2745:27;2738:35;2735:2;;;2786:1;2783;2776:12;2735:2;2823:6;2810:20;2845:60;2860:44;2897:6;2860:44;;;2845:60;;;2836:69;;2925:6;2918:5;2911:21;2961:4;2953:6;2949:17;2994:4;2987:5;2983:16;3029:3;3020:6;3015:3;3011:16;3008:25;3005:2;;;3046:1;3043;3036:12;3005:2;3056:41;3090:6;3085:3;3080;3056:41;;;2728:375;;;;;;;;3111:118;;3178:46;3216:6;3203:20;3178:46;;;3169:55;;3163:66;;;;;3236:241;;3340:2;3328:9;3319:7;3315:23;3311:32;3308:2;;;3356:1;3353;3346:12;3308:2;3391:1;3408:53;3453:7;3444:6;3433:9;3429:22;3408:53;;;3398:63;;3370:97;3302:175;;;;;3484:366;;;3605:2;3593:9;3584:7;3580:23;3576:32;3573:2;;;3621:1;3618;3611:12;3573:2;3656:1;3673:53;3718:7;3709:6;3698:9;3694:22;3673:53;;;3663:63;;3635:97;3763:2;3781:53;3826:7;3817:6;3806:9;3802:22;3781:53;;;3771:63;;3742:98;3567:283;;;;;;3857:1171;;;;;4117:3;4105:9;4096:7;4092:23;4088:33;4085:2;;;4134:1;4131;4124:12;4085:2;4197:1;4186:9;4182:17;4169:31;4220:18;4212:6;4209:30;4206:2;;;4252:1;4249;4242:12;4206:2;4272:83;4347:7;4338:6;4327:9;4323:22;4272:83;;;4262:93;;4148:213;4420:2;4409:9;4405:18;4392:32;4444:18;4436:6;4433:30;4430:2;;;4476:1;4473;4466:12;4430:2;4496:78;4566:7;4557:6;4546:9;4542:22;4496:78;;;4486:88;;4371:209;4639:2;4628:9;4624:18;4611:32;4663:18;4655:6;4652:30;4649:2;;;4695:1;4692;4685:12;4649:2;4715:78;4785:7;4776:6;4765:9;4761:22;4715:78;;;4705:88;;4590:209;4858:2;4847:9;4843:18;4830:32;4882:18;4874:6;4871:30;4868:2;;;4914:1;4911;4904:12;4868:2;4934:78;5004:7;4995:6;4984:9;4980:22;4934:78;;;4924:88;;4809:209;4079:949;;;;;;;;5035:741;;;;;;5209:3;5197:9;5188:7;5184:23;5180:33;5177:2;;;5226:1;5223;5216:12;5177:2;5289:1;5278:9;5274:17;5261:31;5312:18;5304:6;5301:30;5298:2;;;5344:1;5341;5334:12;5298:2;5372:64;5428:7;5419:6;5408:9;5404:22;5372:64;;;5354:82;;;;5240:202;5473:2;5491:53;5536:7;5527:6;5516:9;5512:22;5491:53;;;5481:63;;5452:98;5581:2;5599:53;5644:7;5635:6;5624:9;5620:22;5599:53;;;5589:63;;5560:98;5689:2;5707:53;5752:7;5743:6;5732:9;5728:22;5707:53;;;5697:63;;5668:98;5171:605;;;;;;;;;5783:241;;5887:2;5875:9;5866:7;5862:23;5858:32;5855:2;;;5903:1;5900;5893:12;5855:2;5938:1;5955:53;6000:7;5991:6;5980:9;5976:22;5955:53;;;5945:63;;5917:97;5849:175;;;;;6031:110;6104:31;6129:5;6104:31;;;6099:3;6092:44;6086:55;;;6179:590;;6314:54;6362:5;6314:54;;;6386:6;6381:3;6374:19;6410:4;6405:3;6401:14;6394:21;;6455:56;6505:5;6455:56;;;6532:1;6517:230;6542:6;6539:1;6536:13;6517:230;;;6582:53;6631:3;6622:6;6616:13;6582:53;;;6652:60;6705:6;6652:60;;;6642:70;;6735:4;6730:3;6726:14;6719:21;;6564:1;6561;6557:9;6552:14;;6517:230;;;6521:14;6760:3;6753:10;;6293:476;;;;;;;6777:101;6844:28;6866:5;6844:28;;;6839:3;6832:41;6826:52;;;6885:292;;6983:35;7012:5;6983:35;;;7035:6;7030:3;7023:19;7047:63;7103:6;7096:4;7091:3;7087:14;7080:4;7073:5;7069:16;7047:63;;;7142:29;7164:6;7142:29;;;7135:4;7130:3;7126:14;7122:50;7115:57;;6963:214;;;;;;7185:397;;7340:2;7335:3;7328:15;7377:66;7372:2;7367:3;7363:12;7356:88;7478:66;7473:2;7468:3;7464:12;7457:88;7573:2;7568:3;7564:12;7557:19;;7321:261;;;;7590:110;7663:31;7688:5;7663:31;;;7658:3;7651:44;7645:55;;;7707:104;7776:29;7799:5;7776:29;;;7771:3;7764:42;7758:53;;;7818:193;;7926:2;7915:9;7911:18;7903:26;;7940:61;7998:1;7987:9;7983:17;7974:6;7940:61;;;7897:114;;;;;8018:395;;8182:2;8171:9;8167:18;8159:26;;8196:61;8254:1;8243:9;8239:17;8230:6;8196:61;;;8268:62;8326:2;8315:9;8311:18;8302:6;8268:62;;;8341;8399:2;8388:9;8384:18;8375:6;8341:62;;;8153:260;;;;;;;8420:341;;8578:2;8567:9;8563:18;8555:26;;8628:9;8622:4;8618:20;8614:1;8603:9;8599:17;8592:47;8653:98;8746:4;8737:6;8653:98;;;8645:106;;8549:212;;;;;8768:181;;8870:2;8859:9;8855:18;8847:26;;8884:55;8936:1;8925:9;8921:17;8912:6;8884:55;;;8841:108;;;;;8956:273;;9080:2;9069:9;9065:18;9057:26;;9130:9;9124:4;9120:20;9116:1;9105:9;9101:17;9094:47;9155:64;9214:4;9205:6;9155:64;;;9147:72;;9051:178;;;;;9236:387;;9417:2;9406:9;9402:18;9394:26;;9467:9;9461:4;9457:20;9453:1;9442:9;9438:17;9431:47;9492:121;9608:4;9492:121;;;9484:129;;9388:235;;;;9630:185;;9734:2;9723:9;9719:18;9711:26;;9748:57;9802:1;9791:9;9787:17;9778:6;9748:57;;;9705:110;;;;;9822:256;;9884:2;9878:9;9868:19;;9922:4;9914:6;9910:17;10021:6;10009:10;10006:22;9985:18;9973:10;9970:34;9967:62;9964:2;;;10042:1;10039;10032:12;9964:2;10062:10;10058:2;10051:22;9862:216;;;;;10085:258;;10244:18;10236:6;10233:30;10230:2;;;10276:1;10273;10266:12;10230:2;10305:4;10297:6;10293:17;10285:25;;10333:4;10327;10323:15;10315:23;;10167:176;;;;10350:263;;10514:18;10506:6;10503:30;10500:2;;;10546:1;10543;10536:12;10500:2;10575:4;10567:6;10563:17;10555:25;;10603:4;10597;10593:15;10585:23;;10437:176;;;;10620:258;;10779:18;10771:6;10768:30;10765:2;;;10811:1;10808;10801:12;10765:2;10840:4;10832:6;10828:17;10820:25;;10868:4;10862;10858:15;10850:23;;10702:176;;;;10885:254;;11024:18;11016:6;11013:30;11010:2;;;11056:1;11053;11046:12;11010:2;11100:4;11096:9;11089:4;11081:6;11077:17;11073:33;11065:41;;11129:4;11123;11119:15;11111:23;;10947:192;;;;11148:121;;11257:4;11249:6;11245:17;11234:28;;11226:43;;;;11278:107;;11374:5;11368:12;11358:22;;11352:33;;;;11392:88;;11469:5;11463:12;11453:22;;11447:33;;;;11488:122;;11599:4;11591:6;11587:17;11576:28;;11569:41;;;;11618:128;;11698:42;11691:5;11687:54;11676:65;;11670:76;;;;11753:92;;11833:5;11826:13;11819:21;11808:32;;11802:43;;;;11852:79;;11921:5;11910:16;;11904:27;;;;11938:88;;12016:4;12009:5;12005:16;11994:27;;11988:38;;;;12033:128;;12113:42;12106:5;12102:54;12091:65;;12085:76;;;;12168:79;;12237:5;12226:16;;12220:27;;;;12255:145;12336:6;12331:3;12326;12313:30;12392:1;12383:6;12378:3;12374:16;12367:27;12306:94;;;;12409:268;12474:1;12481:101;12495:6;12492:1;12489:13;12481:101;;;12571:1;12566:3;12562:11;12556:18;12552:1;12547:3;12543:11;12536:39;12517:2;12514:1;12510:10;12505:15;;12481:101;;;12597:6;12594:1;12591:13;12588:2;;;12662:1;12653:6;12648:3;12644:16;12637:27;12588:2;12458:219;;;;;12685:97;;12773:2;12769:7;12764:2;12757:5;12753:14;12749:28;12739:38;;12733:49;;;"
            }
        }
    },
    "sources": {
        "current/protocol/AssetProxy/ERC721Proxy.sol": {
            "id": 0
        },
        "current/protocol/AssetProxy/MixinAssetProxy.sol": {
            "id": 1
        },
        "current/protocol/AssetProxy/MixinAuthorizable.sol": {
            "id": 2
        },
        "current/protocol/AssetProxy/interfaces/IAssetProxy.sol": {
            "id": 3
        },
        "current/protocol/AssetProxy/interfaces/IAuthorizable.sol": {
            "id": 4
        },
        "current/protocol/AssetProxy/mixins/MAssetProxy.sol": {
            "id": 5
        },
        "current/protocol/AssetProxy/mixins/MAuthorizable.sol": {
            "id": 6
        },
        "current/tokens/ERC721Token/ERC721Token.sol": {
            "id": 7
        },
        "current/tokens/ERC721Token/IERC721Receiver.sol": {
            "id": 8
        },
        "current/tokens/ERC721Token/IERC721Token.sol": {
            "id": 9
        },
        "current/utils/LibBytes/LibBytes.sol": {
            "id": 10
        },
        "current/utils/Ownable/IOwnable.sol": {
            "id": 11
        },
        "current/utils/Ownable/Ownable.sol": {
            "id": 12
        },
        "current/utils/SafeMath/SafeMath.sol": {
            "id": 13
        }
    },
    "sourceCodes": {
        "current/protocol/AssetProxy/ERC721Proxy.sol": "/*\n\n  Copyright 2018 ZeroEx Intl.\n\n  Licensed under the Apache License, Version 2.0 (the \"License\");\n  you may not use this file except in compliance with the License.\n  You may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\n  Unless required by applicable law or agreed to in writing, software\n  distributed under the License is distributed on an \"AS IS\" BASIS,\n  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n  See the License for the specific language governing permissions and\n  limitations under the License.\n\n*/\n\npragma solidity ^0.4.24;\npragma experimental ABIEncoderV2;\n\nimport \"../../utils/LibBytes/LibBytes.sol\";\nimport \"../../tokens/ERC721Token/ERC721Token.sol\";\nimport \"./MixinAssetProxy.sol\";\nimport \"./MixinAuthorizable.sol\";\n\ncontract ERC721Proxy is\n    LibBytes,\n    MixinAssetProxy,\n    MixinAuthorizable\n{\n\n    // Id of this proxy.\n    uint8 constant PROXY_ID = 2;\n\n    // Revert reasons\n    string constant INVALID_TRANSFER_AMOUNT = \"Transfer amount must equal 1.\";\n    string constant INVALID_METADATA_LENGTH = \"Metadata must have a length of 53.\";\n    string constant PROXY_ID_MISMATCH = \"Proxy id in metadata does not match this proxy id.\";\n\n    /// @dev Internal version of `transferFrom`.\n    /// @param assetMetadata Encoded byte array.\n    /// @param from Address to transfer asset from.\n    /// @param to Address to transfer asset to.\n    /// @param amount Amount of asset to transfer.\n    function transferFromInternal(\n        bytes memory assetMetadata,\n        address from,\n        address to,\n        uint256 amount\n    )\n        internal\n    {\n        // Data must be intended for this proxy.\n        uint256 length = assetMetadata.length;\n\n        require(\n            length == 53,\n            INVALID_METADATA_LENGTH\n        );\n\n        require(\n            uint8(assetMetadata[length - 1]) == PROXY_ID,\n            PROXY_ID_MISMATCH\n        );\n\n        // There exists only 1 of each token.\n        require(\n            amount == 1,\n            INVALID_TRANSFER_AMOUNT\n        );\n\n        // Decode metadata\n        address token = readAddress(assetMetadata, 0);\n        uint256 tokenId = readUint256(assetMetadata, 20);\n\n        // Transfer token.\n        // Either succeeds or throws.\n        // @TODO: Call safeTransferFrom if there is additional\n        //        data stored in `assetMetadata`.\n        ERC721Token(token).transferFrom(from, to, tokenId);\n    }\n\n    /// @dev Gets the proxy id associated with the proxy address.\n    /// @return Proxy id.\n    function getProxyId()\n        external\n        view\n        returns (uint8)\n    {\n        return PROXY_ID;\n    }\n}\n",
        "current/protocol/AssetProxy/MixinAssetProxy.sol": "/*\n\n  Copyright 2018 ZeroEx Intl.\n\n  Licensed under the Apache License, Version 2.0 (the \"License\");\n  you may not use this file except in compliance with the License.\n  You may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\n  Unless required by applicable law or agreed to in writing, software\n  distributed under the License is distributed on an \"AS IS\" BASIS,\n  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n  See the License for the specific language governing permissions and\n  limitations under the License.\n\n*/\n\npragma solidity ^0.4.24;\npragma experimental ABIEncoderV2;\n\nimport \"./mixins/MAssetProxy.sol\";\nimport \"./mixins/MAuthorizable.sol\";\n\ncontract MixinAssetProxy is \n    MAuthorizable,\n    MAssetProxy\n{\n\n    /// @dev Transfers assets. Either succeeds or throws.\n    /// @param assetMetadata Encoded byte array.\n    /// @param from Address to transfer asset from.\n    /// @param to Address to transfer asset to.\n    /// @param amount Amount of asset to transfer.\n    function transferFrom(\n        bytes assetMetadata,\n        address from,\n        address to,\n        uint256 amount\n    )\n        external\n        onlyAuthorized\n    {\n        transferFromInternal(\n            assetMetadata,\n            from,\n            to,\n            amount\n        );\n    }\n\n    /// @dev Makes multiple transfers of assets. Either succeeds or throws.\n    /// @param assetMetadata Array of byte arrays encoded for the respective asset proxy.\n    /// @param from Array of addresses to transfer assets from.\n    /// @param to Array of addresses to transfer assets to.\n    /// @param amounts Array of amounts of assets to transfer.\n    function batchTransferFrom(\n        bytes[] memory assetMetadata,\n        address[] memory from,\n        address[] memory to,\n        uint256[] memory amounts\n    )\n        public\n        onlyAuthorized\n    {\n        for (uint256 i = 0; i < assetMetadata.length; i++) {\n            transferFromInternal(\n                assetMetadata[i],\n                from[i],\n                to[i],\n                amounts[i]\n            );\n        }\n    }\n}\n",
        "current/protocol/AssetProxy/MixinAuthorizable.sol": "/*\n\n  Copyright 2018 ZeroEx Intl.\n\n  Licensed under the Apache License, Version 2.0 (the \"License\");\n  you may not use this file except in compliance with the License.\n  You may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\n  Unless required by applicable law or agreed to in writing, software\n  distributed under the License is distributed on an \"AS IS\" BASIS,\n  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n  See the License for the specific language governing permissions and\n  limitations under the License.\n\n*/\n\npragma solidity ^0.4.24;\npragma experimental ABIEncoderV2;\n\nimport \"./mixins/MAuthorizable.sol\";\nimport \"../../utils/Ownable/Ownable.sol\";\n\ncontract MixinAuthorizable is\n    Ownable,\n    MAuthorizable\n{\n\n    // Revert reasons\n    string constant SENDER_NOT_AUTHORIZED = \"Sender not authorized to call this method.\";\n    string constant TARGET_NOT_AUTHORIZED = \"Target address must be authorized.\";\n    string constant TARGET_ALREADY_AUTHORIZED = \"Target must not already be authorized.\";\n    string constant INDEX_OUT_OF_BOUNDS = \"Specified array index is out of bounds.\";\n    string constant INDEX_ADDRESS_MISMATCH = \"Address found at index does not match target address.\";\n\n    /// @dev Only authorized addresses can invoke functions with this modifier.\n    modifier onlyAuthorized {\n        require(\n            authorized[msg.sender],\n            SENDER_NOT_AUTHORIZED\n        );\n        _;\n    }\n\n    mapping (address => bool) public authorized;\n    address[] public authorities;\n\n    /// @dev Authorizes an address.\n    /// @param target Address to authorize.\n    function addAuthorizedAddress(address target)\n        external\n        onlyOwner\n    {\n        require(\n            !authorized[target],\n            TARGET_ALREADY_AUTHORIZED\n        );\n\n        authorized[target] = true;\n        authorities.push(target);\n        emit AuthorizedAddressAdded(target, msg.sender);\n    }\n\n    /// @dev Removes authorizion of an address.\n    /// @param target Address to remove authorization from.\n    function removeAuthorizedAddress(address target)\n        external\n        onlyOwner\n    {\n        require(\n            authorized[target],\n            TARGET_NOT_AUTHORIZED\n        );\n\n        delete authorized[target];\n        for (uint i = 0; i < authorities.length; i++) {\n            if (authorities[i] == target) {\n                authorities[i] = authorities[authorities.length - 1];\n                authorities.length -= 1;\n                break;\n            }\n        }\n        emit AuthorizedAddressRemoved(target, msg.sender);\n    }\n\n    /// @dev Removes authorizion of an address.\n    /// @param target Address to remove authorization from.\n    /// @param index Index of target in authorities array.\n    function removeAuthorizedAddressAtIndex(\n        address target,\n        uint256 index\n    )\n        external\n    {\n        require(\n            index < authorities.length,\n            INDEX_OUT_OF_BOUNDS\n        );\n        require(\n            authorities[index] == target,\n            INDEX_ADDRESS_MISMATCH\n        );\n\n        delete authorized[target];\n        authorities[index] = authorities[authorities.length - 1];\n        authorities.length -= 1;\n        emit AuthorizedAddressRemoved(target, msg.sender);\n    }\n\n    /// @dev Gets all authorized addresses.\n    /// @return Array of authorized addresses.\n    function getAuthorizedAddresses()\n        external\n        view\n        returns (address[] memory)\n    {\n        return authorities;\n    }\n}\n",
        "current/protocol/AssetProxy/interfaces/IAssetProxy.sol": "/*\n\n  Copyright 2018 ZeroEx Intl.\n\n  Licensed under the Apache License, Version 2.0 (the \"License\");\n  you may not use this file except in compliance with the License.\n  You may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\n  Unless required by applicable law or agreed to in writing, software\n  distributed under the License is distributed on an \"AS IS\" BASIS,\n  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n  See the License for the specific language governing permissions and\n  limitations under the License.\n\n*/\n\npragma solidity ^0.4.24;\npragma experimental ABIEncoderV2;\n\nimport \"./IAuthorizable.sol\";\n\ncontract IAssetProxy is\n    IAuthorizable\n{\n\n    /// @dev Transfers assets. Either succeeds or throws.\n    /// @param assetMetadata Byte array encoded for the respective asset proxy.\n    /// @param from Address to transfer asset from.\n    /// @param to Address to transfer asset to.\n    /// @param amount Amount of asset to transfer.\n    function transferFrom(\n        bytes assetMetadata,\n        address from,\n        address to,\n        uint256 amount\n    )\n        external;\n    \n    /// @dev Makes multiple transfers of assets. Either succeeds or throws.\n    /// @param assetMetadata Array of byte arrays encoded for the respective asset proxy.\n    /// @param from Array of addresses to transfer assets from.\n    /// @param to Array of addresses to transfer assets to.\n    /// @param amounts Array of amounts of assets to transfer.\n    function batchTransferFrom(\n        bytes[] memory assetMetadata,\n        address[] memory from,\n        address[] memory to,\n        uint256[] memory amounts\n    )\n        public;\n\n    /// @dev Gets the proxy id associated with the proxy address.\n    /// @return Proxy id.\n    function getProxyId()\n        external\n        view\n        returns (uint8);\n}\n\n",
        "current/protocol/AssetProxy/interfaces/IAuthorizable.sol": "/*\n\n  Copyright 2018 ZeroEx Intl.\n\n  Licensed under the Apache License, Version 2.0 (the \"License\");\n  you may not use this file except in compliance with the License.\n  You may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\n  Unless required by applicable law or agreed to in writing, software\n  distributed under the License is distributed on an \"AS IS\" BASIS,\n  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n  See the License for the specific language governing permissions and\n  limitations under the License.\n\n*/\n\npragma solidity ^0.4.24;\npragma experimental ABIEncoderV2;\n\nimport \"../../../utils/Ownable/IOwnable.sol\";\n\ncontract IAuthorizable is\n    IOwnable\n{\n\n    /// @dev Gets all authorized addresses.\n    /// @return Array of authorized addresses.\n    function getAuthorizedAddresses()\n        external\n        view\n        returns (address[]);\n\n    /// @dev Authorizes an address.\n    /// @param target Address to authorize.\n    function addAuthorizedAddress(address target)\n        external;\n\n    /// @dev Removes authorizion of an address.\n    /// @param target Address to remove authorization from.\n    function removeAuthorizedAddress(address target)\n        external;\n\n    /// @dev Removes authorizion of an address.\n    /// @param target Address to remove authorization from.\n    /// @param index Index of target in authorities array.\n    function removeAuthorizedAddressAtIndex(\n        address target,\n        uint256 index\n    )\n        external;\n}\n",
        "current/protocol/AssetProxy/mixins/MAssetProxy.sol": "/*\n\n  Copyright 2018 ZeroEx Intl.\n\n  Licensed under the Apache License, Version 2.0 (the \"License\");\n  you may not use this file except in compliance with the License.\n  You may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\n  Unless required by applicable law or agreed to in writing, software\n  distributed under the License is distributed on an \"AS IS\" BASIS,\n  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n  See the License for the specific language governing permissions and\n  limitations under the License.\n\n*/\n\npragma solidity ^0.4.24;\npragma experimental ABIEncoderV2;\n\nimport \"../interfaces/IAssetProxy.sol\";\n\ncontract MAssetProxy is\n    IAssetProxy\n{\n\n    /// @dev Internal version of `transferFrom`.\n    /// @param assetMetadata Encoded byte array.\n    /// @param from Address to transfer asset from.\n    /// @param to Address to transfer asset to.\n    /// @param amount Amount of asset to transfer.\n    function transferFromInternal(\n        bytes memory assetMetadata,\n        address from,\n        address to,\n        uint256 amount\n    )\n        internal;\n}\n",
        "current/protocol/AssetProxy/mixins/MAuthorizable.sol": "/*\n\n  Copyright 2018 ZeroEx Intl.\n\n  Licensed under the Apache License, Version 2.0 (the \"License\");\n  you may not use this file except in compliance with the License.\n  You may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\n  Unless required by applicable law or agreed to in writing, software\n  distributed under the License is distributed on an \"AS IS\" BASIS,\n  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n  See the License for the specific language governing permissions and\n  limitations under the License.\n\n*/\n\npragma solidity ^0.4.24;\npragma experimental ABIEncoderV2;\n\nimport \"../interfaces/IAuthorizable.sol\";\n\ncontract MAuthorizable is\n    IAuthorizable\n{\n\n    // Event logged when a new address is authorized.\n    event AuthorizedAddressAdded(\n        address indexed target,\n        address indexed caller\n    );\n\n    // Event logged when a currently authorized address is unauthorized.\n    event AuthorizedAddressRemoved(\n        address indexed target,\n        address indexed caller\n    );\n\n    /// @dev Only authorized addresses can invoke functions with this modifier.\n    modifier onlyAuthorized { revert(); _; }\n}\n",
        "current/tokens/ERC721Token/ERC721Token.sol": "/*\nThe MIT License (MIT)\n\nCopyright (c) 2016 Smart Contract Solutions, Inc.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be included\nin all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\nOR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n*/\n\npragma solidity ^0.4.24;\n\nimport \"./IERC721Token.sol\";\nimport \"./IERC721Receiver.sol\";\nimport \"../../utils/SafeMath/SafeMath.sol\";\n\n/**\n * @title ERC721 Non-Fungible Token Standard basic implementation\n * @dev see https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md\n * Modified from https://github.com/OpenZeppelin/zeppelin-solidity/blob/master/contracts/token/ERC721/ERC721BasicToken.sol\n */\ncontract ERC721Token is\n    IERC721Token,\n    SafeMath\n{\n    // Equals to `bytes4(keccak256(\"onERC721Received(address,uint256,bytes)\"))`\n    // which can be also obtained as `ERC721Receiver(0).onERC721Received.selector`\n    bytes4 constant ERC721_RECEIVED = 0xf0b9e5ba;\n\n    // Mapping from token ID to owner\n    mapping (uint256 => address) internal tokenOwner;\n\n    // Mapping from token ID to approved address\n    mapping (uint256 => address) internal tokenApprovals;\n\n    // Mapping from owner to number of owned token\n    mapping (address => uint256) internal ownedTokensCount;\n\n    // Mapping from owner to operator approvals\n    mapping (address => mapping (address => bool)) internal operatorApprovals;\n\n    /**\n    * @dev Guarantees msg.sender is owner of the given token\n    * @param _tokenId uint256 ID of the token to validate its ownership belongs to msg.sender\n    */\n    modifier onlyOwnerOf(uint256 _tokenId) {\n        require(ownerOf(_tokenId) == msg.sender);\n        _;\n    }\n\n    /**\n    * @dev Checks msg.sender can transfer a token, by being owner, approved, or operator\n    * @param _tokenId uint256 ID of the token to validate\n    */\n    modifier canTransfer(uint256 _tokenId) {\n        require(isApprovedOrOwner(msg.sender, _tokenId));\n        _;\n    }\n\n    function ERC721Token(\n        string _name,\n        string _symbol)\n        public\n    {\n        name_ = _name;\n        symbol_ = _symbol;\n    }\n\n    /**\n    * @dev Gets the token name\n    * @return string representing the token name\n    */\n    function name()\n        public\n        view\n        returns (string)\n    {\n        return name_;\n    }\n\n    /**\n    * @dev Gets the token symbol\n    * @return string representing the token symbol\n    */\n    function symbol()\n        public\n        view\n        returns (string)\n    {\n        return symbol_;\n    }\n\n    /**\n    * @dev Gets the balance of the specified address\n    * @param _owner address to query the balance of\n    * @return uint256 representing the amount owned by the passed address\n    */\n    function balanceOf(address _owner)\n        public\n        view\n        returns (uint256)\n    {\n        require(_owner != address(0));\n        return ownedTokensCount[_owner];\n    }\n\n    /**\n    * @dev Gets the owner of the specified token ID\n    * @param _tokenId uint256 ID of the token to query the owner of\n    * @return owner address currently marked as the owner of the given token ID\n    */\n    function ownerOf(uint256 _tokenId)\n        public\n        view\n        returns (address)\n    {\n        address owner = tokenOwner[_tokenId];\n        require(owner != address(0));\n        return owner;\n    }\n\n    /**\n    * @dev Returns whether the specified token exists\n    * @param _tokenId uint256 ID of the token to query the existance of\n    * @return whether the token exists\n    */\n    function exists(uint256 _tokenId)\n        public\n        view\n        returns (bool)\n    {\n        address owner = tokenOwner[_tokenId];\n        return owner != address(0);\n    }\n\n    /**\n    * @dev Approves another address to transfer the given token ID\n    * @dev The zero address indicates there is no approved address.\n    * @dev There can only be one approved address per token at a given time.\n    * @dev Can only be called by the token owner or an approved operator.\n    * @param _to address to be approved for the given token ID\n    * @param _tokenId uint256 ID of the token to be approved\n    */\n    function approve(address _to, uint256 _tokenId)\n        public\n    {\n        address owner = ownerOf(_tokenId);\n        require(_to != owner);\n        require(msg.sender == owner || isApprovedForAll(owner, msg.sender));\n\n        if (getApproved(_tokenId) != address(0) || _to != address(0)) {\n            tokenApprovals[_tokenId] = _to;\n            emit Approval(owner, _to, _tokenId);\n        }\n    }\n\n    /**\n    * @dev Gets the approved address for a token ID, or zero if no address set\n    * @param _tokenId uint256 ID of the token to query the approval of\n    * @return address currently approved for a the given token ID\n    */\n    function getApproved(uint256 _tokenId)\n        public\n        view\n        returns (address)\n    {\n        return tokenApprovals[_tokenId];\n    }\n\n    /**\n    * @dev Sets or unsets the approval of a given operator\n    * @dev An operator is allowed to transfer all tokens of the sender on their behalf\n    * @param _to operator address to set the approval\n    * @param _approved representing the status of the approval to be set\n    */\n    function setApprovalForAll(address _to, bool _approved)\n        public\n    {\n        require(_to != msg.sender);\n        operatorApprovals[msg.sender][_to] = _approved;\n        emit ApprovalForAll(msg.sender, _to, _approved);\n    }\n\n    /**\n    * @dev Tells whether an operator is approved by a given owner\n    * @param _owner owner address which you want to query the approval of\n    * @param _operator operator address which you want to query the approval of\n    * @return bool whether the given operator is approved by the given owner\n    */\n    function isApprovedForAll(address _owner, address _operator)\n        public\n        view\n        returns (bool)\n    {\n        return operatorApprovals[_owner][_operator];\n    }\n\n    /**\n    * @dev Transfers the ownership of a given token ID to another address\n    * @dev Usage of this method is discouraged, use `safeTransferFrom` whenever possible\n    * @dev Requires the msg sender to be the owner, approved, or operator\n    * @param _from current owner of the token\n    * @param _to address to receive the ownership of the given token ID\n    * @param _tokenId uint256 ID of the token to be transferred\n    */\n    function transferFrom(address _from, address _to, uint256 _tokenId)\n        public\n        canTransfer(_tokenId)\n    {\n        require(_from != address(0));\n        require(_to != address(0));\n\n        clearApproval(_from, _tokenId);\n        removeTokenFrom(_from, _tokenId);\n        addTokenTo(_to, _tokenId);\n\n        emit Transfer(_from, _to, _tokenId);\n    }\n\n    /**\n    * @dev Safely transfers the ownership of a given token ID to another address\n    * @dev If the target address is a contract, it must implement `onERC721Received`,\n    *  which is called upon a safe transfer, and return the magic value\n    *  `bytes4(keccak256(\"onERC721Received(address,uint256,bytes)\"))`; otherwise,\n    *  the transfer is reverted.\n    * @dev Requires the msg sender to be the owner, approved, or operator\n    * @param _from current owner of the token\n    * @param _to address to receive the ownership of the given token ID\n    * @param _tokenId uint256 ID of the token to be transferred\n    */\n    function safeTransferFrom(\n        address _from,\n        address _to,\n        uint256 _tokenId)\n        public\n        canTransfer(_tokenId)\n    {\n        // solium-disable-next-line arg-overflow\n        safeTransferFrom(_from, _to, _tokenId, \"\");\n    }\n\n    /**\n    * @dev Safely transfers the ownership of a given token ID to another address\n    * @dev If the target address is a contract, it must implement `onERC721Received`,\n    *  which is called upon a safe transfer, and return the magic value\n    *  `bytes4(keccak256(\"onERC721Received(address,uint256,bytes)\"))`; otherwise,\n    *  the transfer is reverted.\n    * @dev Requires the msg sender to be the owner, approved, or operator\n    * @param _from current owner of the token\n    * @param _to address to receive the ownership of the given token ID\n    * @param _tokenId uint256 ID of the token to be transferred\n    * @param _data bytes data to send along with a safe transfer check\n    */\n    function safeTransferFrom(\n        address _from,\n        address _to,\n        uint256 _tokenId,\n        bytes _data)\n        public\n        canTransfer(_tokenId)\n    {\n        transferFrom(_from, _to, _tokenId);\n        // solium-disable-next-line arg-overflow\n        require(checkAndCallSafeTransfer(_from, _to, _tokenId, _data));\n    }\n\n    /**\n    * @dev Returns whether the given spender can transfer a given token ID\n    * @param _spender address of the spender to query\n    * @param _tokenId uint256 ID of the token to be transferred\n    * @return bool whether the msg.sender is approved for the given token ID,\n    *  is an operator of the owner, or is the owner of the token\n    */\n    function isApprovedOrOwner(address _spender, uint256 _tokenId)\n        internal\n        view\n        returns (bool)\n    {\n        address owner = ownerOf(_tokenId);\n        return _spender == owner || getApproved(_tokenId) == _spender || isApprovedForAll(owner, _spender);\n    }\n\n    /**\n    * @dev Internal function to mint a new token\n    * @dev Reverts if the given token ID already exists\n    * @param _to The address that will own the minted token\n    * @param _tokenId uint256 ID of the token to be minted by the msg.sender\n    */\n    function _mint(address _to, uint256 _tokenId)\n        internal\n    {\n        require(_to != address(0));\n        addTokenTo(_to, _tokenId);\n        emit Transfer(address(0), _to, _tokenId);\n    }\n\n    /**\n    * @dev Internal function to burn a specific token\n    * @dev Reverts if the token does not exist\n    * @param _tokenId uint256 ID of the token being burned by the msg.sender\n    */\n    function _burn(address _owner, uint256 _tokenId)\n        internal\n    {\n        clearApproval(_owner, _tokenId);\n        removeTokenFrom(_owner, _tokenId);\n        emit Transfer(_owner, address(0), _tokenId);\n    }\n\n    /**\n    * @dev Internal function to clear current approval of a given token ID\n    * @dev Reverts if the given address is not indeed the owner of the token\n    * @param _owner owner of the token\n    * @param _tokenId uint256 ID of the token to be transferred\n    */\n    function clearApproval(address _owner, uint256 _tokenId)\n        internal\n    {\n        require(ownerOf(_tokenId) == _owner);\n        if (tokenApprovals[_tokenId] != address(0)) {\n            tokenApprovals[_tokenId] = address(0);\n            emit Approval(_owner, address(0), _tokenId);\n        }\n    }\n\n    /**\n    * @dev Internal function to add a token ID to the list of a given address\n    * @param _to address representing the new owner of the given token ID\n    * @param _tokenId uint256 ID of the token to be added to the tokens list of the given address\n    */\n    function addTokenTo(address _to, uint256 _tokenId)\n        internal\n    {\n        require(tokenOwner[_tokenId] == address(0));\n        tokenOwner[_tokenId] = _to;\n        ownedTokensCount[_to] = safeAdd(ownedTokensCount[_to], 1);\n    }\n\n    /**\n    * @dev Internal function to remove a token ID from the list of a given address\n    * @param _from address representing the previous owner of the given token ID\n    * @param _tokenId uint256 ID of the token to be removed from the tokens list of the given address\n    */\n    function removeTokenFrom(address _from, uint256 _tokenId)\n        internal\n    {\n        require(ownerOf(_tokenId) == _from);\n        ownedTokensCount[_from] = safeSub(ownedTokensCount[_from], 1);\n        tokenOwner[_tokenId] = address(0);\n    }\n\n    /**\n    * @dev Internal function to invoke `onERC721Received` on a target address\n    * @dev The call is not executed if the target address is not a contract\n    * @param _from address representing the previous owner of the given token ID\n    * @param _to target address that will receive the tokens\n    * @param _tokenId uint256 ID of the token to be transferred\n    * @param _data bytes optional data to send along with the call\n    * @return whether the call correctly returned the expected magic value\n    */\n    function checkAndCallSafeTransfer(\n        address _from,\n        address _to,\n        uint256 _tokenId,\n        bytes _data)\n        internal\n        returns (bool)\n    {\n        if (!isContract(_to)) {\n            return true;\n        }\n        bytes4 retval = IERC721Receiver(_to).onERC721Received(_from, _tokenId, _data);\n        return (retval == ERC721_RECEIVED);\n    }\n\n    function isContract(address addr)\n        internal\n        view\n        returns (bool)\n    {\n        uint256 size;\n        // XXX Currently there is no better way to check if there is a contract in an address\n        // than to check the size of the code at that address.\n        // See https://ethereum.stackexchange.com/a/14016/36603\n        // for more details about how this works.\n        // TODO Check this again before the Serenity release, because all addresses will be\n        // contracts then.\n        assembly { size := extcodesize(addr) }  // solium-disable-line security/no-inline-assembly\n        return size > 0;\n    }\n}\n",
        "current/tokens/ERC721Token/IERC721Receiver.sol": "/*\nThe MIT License (MIT)\n\nCopyright (c) 2016 Smart Contract Solutions, Inc.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be included\nin all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\nOR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n*/\n\npragma solidity ^0.4.24;\n\n/**\n * @title ERC721 token receiver interface\n * @dev Interface for any contract that wants to support safeTransfers\n *      rom ERC721 asset contracts.\n * Modified from https://github.com/OpenZeppelin/zeppelin-solidity/blob/master/contracts/token/ERC721/ERC721Receiver.sol\n */\ncontract IERC721Receiver {\n    /**\n    * @dev Magic value to be returned upon successful reception of an NFT\n    *  Equals to `bytes4(keccak256(\"onERC721Received(address,uint256,bytes)\"))`,\n    *  which can be also obtained as `ERC721Receiver(0).onERC721Received.selector`\n    */\n    bytes4 constant ERC721_RECEIVED = 0xf0b9e5ba;\n\n    /**\n    * @notice Handle the receipt of an NFT\n    * @dev The ERC721 smart contract calls this function on the recipient\n    *  after a `safetransfer`. This function MAY throw to revert and reject the\n    *  transfer. This function MUST use 50,000 gas or less. Return of other\n    *  than the magic value MUST result in the transaction being reverted.\n    *  Note: the contract address is always the message sender.\n    * @param _from The sending address\n    * @param _tokenId The NFT identifier which is being transfered\n    * @param _data Additional data with no specified format\n    * @return `bytes4(keccak256(\"onERC721Received(address,uint256,bytes)\"))`\n    */\n    function onERC721Received(\n        address _from,\n        uint256 _tokenId,\n        bytes _data)\n        public\n        returns (bytes4);\n}\n",
        "current/tokens/ERC721Token/IERC721Token.sol": "/*\nThe MIT License (MIT)\n\nCopyright (c) 2016 Smart Contract Solutions, Inc.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be included\nin all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\nOR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n*/\n\npragma solidity ^0.4.24;\n\n/**\n * @title ERC721 Non-Fungible Token Standard basic interface\n * @dev see https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md\n * Modified from https://github.com/OpenZeppelin/zeppelin-solidity/blob/master/contracts/token/ERC721/ERC721Basic.sol\n */\ncontract IERC721Token {\n    string internal name_;\n    string internal symbol_;\n\n    event Transfer(\n        address indexed _from,\n        address indexed _to,\n        uint256 _tokenId\n    );\n    event Approval(\n        address indexed _owner,\n        address indexed _approved,\n        uint256 _tokenId\n    );\n    event ApprovalForAll(\n        address indexed _owner,\n        address indexed _operator,\n        bool _approved\n    );\n\n    function name()\n        public\n        view\n        returns (string);\n    function symbol()\n        public\n        view\n        returns (string);\n\n    function balanceOf(address _owner)\n        public\n        view\n        returns (uint256 _balance);\n    function ownerOf(uint256 _tokenId)\n        public\n        view\n        returns (address _owner);\n    function exists(uint256 _tokenId)\n        public\n        view\n        returns (bool _exists);\n\n    function approve(address _to, uint256 _tokenId)\n        public;\n    function getApproved(uint256 _tokenId)\n        public\n        view\n        returns (address _operator);\n\n    function setApprovalForAll(address _operator, bool _approved)\n        public;\n    function isApprovedForAll(address _owner, address _operator)\n        public\n        view\n        returns (bool);\n\n    function transferFrom(\n        address _from,\n        address _to,\n        uint256 _tokenId)\n        public;\n    function safeTransferFrom(\n        address _from,\n        address _to,\n        uint256 _tokenId)\n        public;\n    function safeTransferFrom(\n        address _from,\n        address _to,\n        uint256 _tokenId,\n        bytes _data)\n        public;\n}\n",
        "current/utils/LibBytes/LibBytes.sol": "/*\n\n  Copyright 2018 ZeroEx Intl.\n\n  Licensed under the Apache License, Version 2.0 (the \"License\");\n  you may not use this file except in compliance with the License.\n  You may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\n  Unless required by applicable law or agreed to in writing, software\n  distributed under the License is distributed on an \"AS IS\" BASIS,\n  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n  See the License for the specific language governing permissions and\n  limitations under the License.\n\n*/\n\npragma solidity ^0.4.24;\n\ncontract LibBytes {\n\n    // Revert reasons\n    string constant GT_ZERO_LENGTH_REQUIRED = \"Length must be greater than 0.\";\n    string constant GTE_4_LENGTH_REQUIRED = \"Length must be greater than or equal to 4.\";\n    string constant GTE_20_LENGTH_REQUIRED = \"Length must be greater than or equal to 20.\";\n    string constant GTE_32_LENGTH_REQUIRED = \"Length must be greater than or equal to 32.\";\n    string constant INDEX_OUT_OF_BOUNDS = \"Specified array index is out of bounds.\";\n\n    /// @dev Pops the last byte off of a byte array by modifying its length.\n    /// @param b Byte array that will be modified.\n    /// @return The byte that was popped off.\n    function popByte(bytes memory b)\n        internal\n        pure\n        returns (bytes1 result)\n    {\n        require(\n            b.length > 0,\n            GT_ZERO_LENGTH_REQUIRED\n        );\n\n        // Store last byte.\n        result = b[b.length - 1];\n        \n        assembly {\n            // Decrement length of byte array.\n            let newLen := sub(mload(b), 1)\n            mstore(b, newLen)\n        }\n        return result;\n    }\n\n    /// @dev Pops the last 20 bytes off of a byte array by modifying its length.\n    /// @param b Byte array that will be modified.\n    /// @return The 20 byte address that was popped off.\n    function popAddress(bytes memory b)\n        internal\n        pure\n        returns (address result)\n    {\n        require(\n            b.length >= 20,\n            GTE_20_LENGTH_REQUIRED\n        );\n\n        // Store last 20 bytes.\n        result = readAddress(b, b.length - 20);\n\n        assembly {\n            // Subtract 20 from byte array length.\n            let newLen := sub(mload(b), 20)\n            mstore(b, newLen)\n        }\n        return result;\n    }\n\n    /// @dev Tests equality of two byte arrays.\n    /// @param lhs First byte array to compare.\n    /// @param rhs Second byte array to compare.\n    /// @return True if arrays are the same. False otherwise.\n    function areBytesEqual(\n        bytes memory lhs,\n        bytes memory rhs\n    )\n        internal\n        pure\n        returns (bool equal)\n    {\n        assembly {\n            // Get the number of words occupied by <lhs>\n            let lenFullWords := div(add(mload(lhs), 0x1F), 0x20)\n\n            // Add 1 to the number of words, to account for the length field\n            lenFullWords := add(lenFullWords, 0x1)\n\n            // Test equality word-by-word.\n            // Terminates early if there is a mismatch.\n            for {let i := 0} lt(i, lenFullWords) {i := add(i, 1)} {\n                let lhsWord := mload(add(lhs, mul(i, 0x20)))\n                let rhsWord := mload(add(rhs, mul(i, 0x20)))\n                equal := eq(lhsWord, rhsWord)\n                if eq(equal, 0) {\n                    // Break\n                    i := lenFullWords\n                }\n            }\n       }\n\n       return equal;\n    }\n\n    /// @dev Reads an address from a position in a byte array.\n    /// @param b Byte array containing an address.\n    /// @param index Index in byte array of address.\n    /// @return address from byte array.\n    function readAddress(\n        bytes memory b,\n        uint256 index\n    )\n        internal\n        pure\n        returns (address result)\n    {\n        require(\n            b.length >= index + 20,  // 20 is length of address\n            GTE_20_LENGTH_REQUIRED\n        ); \n\n        // Add offset to index:\n        // 1. Arrays are prefixed by 32-byte length parameter (add 32 to index)\n        // 2. Account for size difference between address length and 32-byte storage word (subtract 12 from index)\n        index += 20;\n\n        // Read address from array memory\n        assembly {\n            // 1. Add index to address of bytes array\n            // 2. Load 32-byte word from memory\n            // 3. Apply 20-byte mask to obtain address\n            result := and(mload(add(b, index)), 0xffffffffffffffffffffffffffffffffffffffff)\n        }\n        return result;\n    }\n\n    /// @dev Writes an address into a specific position in a byte array.\n    /// @param b Byte array to insert address into.\n    /// @param index Index in byte array of address.\n    /// @param input Address to put into byte array.\n    function writeAddress(\n        bytes memory b,\n        uint256 index,\n        address input\n    )\n        internal\n        pure\n    {\n        require(\n            b.length >= index + 20,  // 20 is length of address\n            GTE_20_LENGTH_REQUIRED\n        ); \n\n        // Add offset to index:\n        // 1. Arrays are prefixed by 32-byte length parameter (add 32 to index)\n        // 2. Account for size difference between address length and 32-byte storage word (subtract 12 from index)\n        index += 20;\n\n        // Store address into array memory\n        assembly {\n            // The address occupies 20 bytes and mstore stores 32 bytes.\n            // First fetch the 32-byte word where we'll be storing the address, then\n            // apply a mask so we have only the bytes in the word that the address will not occupy.\n            // Then combine these bytes with the address and store the 32 bytes back to memory with mstore.\n\n            // 1. Add index to address of bytes array\n            // 2. Load 32-byte word from memory\n            // 3. Apply 12-byte mask to obtain extra bytes occupying word of memory where we'll store the address\n            let neighbors := and(mload(add(b, index)), 0xffffffffffffffffffffffff0000000000000000000000000000000000000000)\n\n            // Store the neighbors and address into memory\n            mstore(add(b, index), xor(input, neighbors))\n        }\n    }\n\n    /// @dev Reads a bytes32 value from a position in a byte array.\n    /// @param b Byte array containing a bytes32 value.\n    /// @param index Index in byte array of bytes32 value.\n    /// @return bytes32 value from byte array.\n    function readBytes32(\n        bytes memory b,\n        uint256 index\n    )\n        internal\n        pure\n        returns (bytes32 result)\n    {\n        require(\n            b.length >= index + 32,\n            GTE_32_LENGTH_REQUIRED\n        );\n\n        // Arrays are prefixed by a 256 bit length parameter\n        index += 32;\n\n        // Read the bytes32 from array memory\n        assembly {\n            result := mload(add(b, index))\n        }\n        return result;\n    }\n\n    /// @dev Writes a bytes32 into a specific position in a byte array.\n    /// @param b Byte array to insert <input> into.\n    /// @param index Index in byte array of <input>.\n    /// @param input bytes32 to put into byte array.\n    function writeBytes32(\n        bytes memory b,\n        uint256 index,\n        bytes32 input\n    )\n        internal\n        pure\n    {\n        require(\n            b.length >= index + 32,\n            GTE_32_LENGTH_REQUIRED\n        );\n\n        // Arrays are prefixed by a 256 bit length parameter\n        index += 32;\n\n        // Read the bytes32 from array memory\n        assembly {\n            mstore(add(b, index), input)\n        }\n    }\n\n    /// @dev Reads a uint256 value from a position in a byte array.\n    /// @param b Byte array containing a uint256 value.\n    /// @param index Index in byte array of uint256 value.\n    /// @return uint256 value from byte array.\n    function readUint256(\n        bytes memory b,\n        uint256 index\n    )\n        internal\n        pure\n        returns (uint256 result)\n    {\n        return uint256(readBytes32(b, index));\n    }\n\n    /// @dev Writes a uint256 into a specific position in a byte array.\n    /// @param b Byte array to insert <input> into.\n    /// @param index Index in byte array of <input>.\n    /// @param input uint256 to put into byte array.\n    function writeUint256(\n        bytes memory b,\n        uint256 index,\n        uint256 input\n    )\n        internal\n        pure\n    {\n        writeBytes32(b, index, bytes32(input));\n    }\n\n    /// @dev Reads the first 4 bytes from a byte array of arbitrary length.\n    /// @param b Byte array to read first 4 bytes from.\n    /// @return First 4 bytes of data.\n    function readFirst4(bytes memory b)\n        internal\n        pure\n        returns (bytes4 result)\n    {\n        require(\n            b.length >= 4,\n            GTE_4_LENGTH_REQUIRED\n        );\n        assembly {\n            result := mload(add(b, 32))\n        }\n        return result;\n    }\n}\n",
        "current/utils/Ownable/IOwnable.sol": "pragma solidity ^0.4.24;\npragma experimental ABIEncoderV2;\n\n/*\n * Ownable\n *\n * Base contract with an owner.\n * Provides onlyOwner modifier, which prevents function from running if it is called by anyone other than the owner.\n */\n\ncontract IOwnable {\n    function transferOwnership(address newOwner)\n        public;\n}\n",
        "current/utils/Ownable/Ownable.sol": "pragma solidity ^0.4.24;\npragma experimental ABIEncoderV2;\n\n/*\n * Ownable\n *\n * Base contract with an owner.\n * Provides onlyOwner modifier, which prevents function from running if it is called by anyone other than the owner.\n */\n\nimport \"./IOwnable.sol\";\n\ncontract Ownable is IOwnable {\n    address public owner;\n\n    constructor ()\n        public\n    {\n        owner = msg.sender;\n    }\n\n    modifier onlyOwner() {\n        require(\n            msg.sender == owner,\n            \"Only contract owner is allowed to call this method.\"\n        );\n        _;\n    }\n\n    function transferOwnership(address newOwner)\n        public\n        onlyOwner\n    {\n        if (newOwner != address(0)) {\n            owner = newOwner;\n        }\n    }\n}\n",
        "current/utils/SafeMath/SafeMath.sol": "pragma solidity ^0.4.24;\npragma experimental ABIEncoderV2;\n\ncontract SafeMath {\n    function safeMul(uint a, uint b)\n        internal\n        pure\n        returns (uint256)\n    {\n        uint c = a * b;\n        assert(a == 0 || c / a == b);\n        return c;\n    }\n\n    function safeDiv(uint a, uint b)\n        internal\n        pure\n        returns (uint256)\n    {\n        uint c = a / b;\n        return c;\n    }\n\n    function safeSub(uint a, uint b)\n        internal\n        pure\n        returns (uint256)\n    {\n        assert(b <= a);\n        return a - b;\n    }\n\n    function safeAdd(uint a, uint b)\n        internal\n        pure\n        returns (uint256)\n    {\n        uint c = a + b;\n        assert(c >= a);\n        return c;\n    }\n\n    function max64(uint64 a, uint64 b)\n        internal\n        pure\n        returns (uint256)\n    {\n        return a >= b ? a : b;\n    }\n\n    function min64(uint64 a, uint64 b)\n        internal\n        pure\n        returns (uint256)\n    {\n        return a < b ? a : b;\n    }\n\n    function max256(uint256 a, uint256 b)\n        internal\n        pure\n        returns (uint256)\n    {\n        return a >= b ? a : b;\n    }\n\n    function min256(uint256 a, uint256 b)\n        internal\n        pure\n        returns (uint256)\n    {\n        return a < b ? a : b;\n    }\n}\n"
    },
    "sourceTreeHashHex": "0x371ab00cbfe56018f059372e27341cf72512c94846337085a6f64926d572fde4",
    "compiler": {
        "name": "solc",
        "version": "soljson-v0.4.24+commit.e67f0147.js",
        "settings": {
            "outputSelection": {
                "*": {
                    "*": [
                        "abi",
                        "evm.bytecode.object",
                        "evm.bytecode.sourceMap",
                        "evm.deployedBytecode.object",
                        "evm.deployedBytecode.sourceMap"
                    ]
                }
            }
        }
    },
    "networks": {}
}