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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -47,11 +47,94 @@
47
47
  "internalType": "bytes4",
48
48
  "name": "refundLocktime",
49
49
  "type": "bytes4"
50
+ },
51
+ {
52
+ "indexed": false,
53
+ "internalType": "address",
54
+ "name": "vault",
55
+ "type": "address"
50
56
  }
51
57
  ],
52
58
  "name": "DepositRevealed",
53
59
  "type": "event"
54
60
  },
61
+ {
62
+ "anonymous": false,
63
+ "inputs": [
64
+ {
65
+ "indexed": true,
66
+ "internalType": "address",
67
+ "name": "previousOwner",
68
+ "type": "address"
69
+ },
70
+ {
71
+ "indexed": true,
72
+ "internalType": "address",
73
+ "name": "newOwner",
74
+ "type": "address"
75
+ }
76
+ ],
77
+ "name": "OwnershipTransferred",
78
+ "type": "event"
79
+ },
80
+ {
81
+ "anonymous": false,
82
+ "inputs": [
83
+ {
84
+ "indexed": true,
85
+ "internalType": "address",
86
+ "name": "vault",
87
+ "type": "address"
88
+ },
89
+ {
90
+ "indexed": false,
91
+ "internalType": "bool",
92
+ "name": "isTrusted",
93
+ "type": "bool"
94
+ }
95
+ ],
96
+ "name": "VaultStatusUpdated",
97
+ "type": "event"
98
+ },
99
+ {
100
+ "inputs": [
101
+ {
102
+ "internalType": "address",
103
+ "name": "",
104
+ "type": "address"
105
+ }
106
+ ],
107
+ "name": "isVaultTrusted",
108
+ "outputs": [
109
+ {
110
+ "internalType": "bool",
111
+ "name": "",
112
+ "type": "bool"
113
+ }
114
+ ],
115
+ "stateMutability": "view",
116
+ "type": "function"
117
+ },
118
+ {
119
+ "inputs": [],
120
+ "name": "owner",
121
+ "outputs": [
122
+ {
123
+ "internalType": "address",
124
+ "name": "",
125
+ "type": "address"
126
+ }
127
+ ],
128
+ "stateMutability": "view",
129
+ "type": "function"
130
+ },
131
+ {
132
+ "inputs": [],
133
+ "name": "renounceOwnership",
134
+ "outputs": [],
135
+ "stateMutability": "nonpayable",
136
+ "type": "function"
137
+ },
55
138
  {
56
139
  "inputs": [
57
140
  {
@@ -129,6 +212,24 @@
129
212
  "stateMutability": "nonpayable",
130
213
  "type": "function"
131
214
  },
215
+ {
216
+ "inputs": [
217
+ {
218
+ "internalType": "address",
219
+ "name": "vault",
220
+ "type": "address"
221
+ },
222
+ {
223
+ "internalType": "bool",
224
+ "name": "isTrusted",
225
+ "type": "bool"
226
+ }
227
+ ],
228
+ "name": "setVaultStatus",
229
+ "outputs": [],
230
+ "stateMutability": "nonpayable",
231
+ "type": "function"
232
+ },
132
233
  {
133
234
  "inputs": [
134
235
  {
@@ -179,6 +280,19 @@
179
280
  "stateMutability": "nonpayable",
180
281
  "type": "function"
181
282
  },
283
+ {
284
+ "inputs": [
285
+ {
286
+ "internalType": "address",
287
+ "name": "newOwner",
288
+ "type": "address"
289
+ }
290
+ ],
291
+ "name": "transferOwnership",
292
+ "outputs": [],
293
+ "stateMutability": "nonpayable",
294
+ "type": "function"
295
+ },
182
296
  {
183
297
  "inputs": [
184
298
  {
@@ -214,8 +328,8 @@
214
328
  "type": "function"
215
329
  }
216
330
  ],
217
- "bytecode": "0x608060405234801561001057600080fd5b506129e1806100206000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c806325750db71461004657806343c6de29146100625780638d658d4e14610095575b600080fd5b610060600480360381019061005b91906116d0565b6100b1565b005b61007c60048036038101906100779190611725565b61059f565b60405161008c9493929190611d9d565b60405180910390f35b6100af60048036038101906100aa9190611625565b61062c565b005b60008160200160208101906100c69190611558565b8260400160208101906100d991906115fc565b8360600160208101906100ec9190611581565b8460800160208101906100ff9190611581565b8560a001602081019061011291906115d3565b604051602001610126959493929190611c62565b604051602081830303815290604052905060006101b383600001602081019061014f919061174e565b60ff168580604001906101629190611f51565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061063290919063ffffffff16565b905060006101c082610872565b9050601481511415610229576101d583610c14565b80519060200120818051906020012014610224576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161021b90611ef1565b60405180910390fd5b6102c6565b60208151141561028a5761023c83610ce1565b61024582610da7565b14610285576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161027c90611e91565b60405180910390fd5b6102c5565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102bc90611eb1565b60405180910390fd5b5b600061033a8660000160208101906102de91906115d3565b8780602001906102ee9190611f51565b8980604001906102fe9190611f51565b8b606001602081019061031191906115d3565b60405160200161032696959493929190611c01565b604051602081830303815290604052610ce1565b9050600080600083886000016020810190610355919061174e565b604051602001610366929190611bd5565b6040516020818303038152906040528051906020012060001c81526020019081526020016000209050600081600001601c9054906101000a900463ffffffff1663ffffffff16146103ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103e390611ed1565b60405180910390fd5b600060208501519050808260000160146101000a81548167ffffffffffffffff021916908360c01c021790555086602001602081019061042c9190611558565b8260000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055504282600001601c6101000a81548163ffffffff021916908363ffffffff1602179055508660c00160208101906104a49190611558565b8260010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fa62fd60993aa217b6f00fbb6f377e73a7bbf09f76e730ca9c99f9d54edddc7e88388600001602081019061051b919061174e565b89602001602081019061052e9190611558565b8a604001602081019061054191906115fc565b8b60600160208101906105549190611581565b8c60800160208101906105679190611581565b8d60a001602081019061057a91906115d3565b60405161058d9796959493929190611de2565b60405180910390a15050505050505050565b60006020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060000160149054906101000a900460c01b9080600001601c9054906101000a900463ffffffff16908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905084565b50505050565b606060008061064085610dca565b80925081935050507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156106ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a290611e51565b60405180910390fd5b8084106106ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106e490611f11565b60405180910390fd5b60606000808460016106ff9190612030565b905060005b878110156107be5761072d82838b5161071d9190612288565b8b610ec69092919063ffffffff16565b935061073884610f8c565b92507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83141561079d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161079490611e71565b60405180910390fd5b82826107a99190612030565b915080806107b69061244a565b915050610704565b506107e081828a516107d09190612288565b8a610ec69092919063ffffffff16565b92506107eb83610f8c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415610850576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084790611e71565b60405180910390fd5b61086581838a610ec69092919063ffffffff16565b9550505050505092915050565b60606000826008815181106108b0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b60f81c905082516009826108cf9190612086565b60ff16146108ef5760405180602001604052806000815250915050610c0f565b60008360098151811061092b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b60f81c60ff161415610a1e5760028160ff1610156109665760405180602001604052806000815250915050610c0f565b600083600a815181106109a2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b60f81c60ff1690506002826109c291906122bc565b60ff16811415806109e15750602081141580156109e0575060148114155b5b156109ff576040518060200160405280600081525092505050610c0f565b610a15600b8286610ec69092919063ffffffff16565b92505050610c0f565b6000610a3760086003866110709092919063ffffffff16565b90507fe1683aec1a10d43657f3f2c82e683d8e19e8a3f320ce9d3bf22c6ca6ab4cbce6811415610b3b57601484600b81518110610a9d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b60f81c60ff16141580610afd57507f3b50b2715f5a28d2a7eeb517f17ec797e8536bd425bf31fc4f6bf7ce1e34b77d610afa60028651610ae89190612288565b6002876110709092919063ffffffff16565b14155b15610b1b576040518060200160405280600081525092505050610c0f565b610b32600c601486610ec69092919063ffffffff16565b92505050610c0f565b7fa0916ee0b243ee20fb4ce56170744d86b54d7ae03a418a7a12156f40dedcf7d7811415610bfa5760878460018651610b749190612288565b81518110610bab577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b60f81c60ff1614610bda576040518060200160405280600081525092505050610c0f565b610bf1600b601486610ec69092919063ffffffff16565b92505050610c0f565b50604051806020016040528060008152509150505b919050565b60606003600283604051610c289190611c4b565b602060405180830381855afa158015610c45573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610c6891906115aa565b604051602001610c789190611bba565b604051602081830303815290604052604051610c949190611c4b565b602060405180830381855afa158015610cb1573d6000803e3d6000fd5b5050506040515160601b604051602001610ccb9190611b9f565b6040516020818303038152906040529050919050565b600060028083604051610cf49190611c4b565b602060405180830381855afa158015610d11573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610d3491906115aa565b604051602001610d449190611bba565b604051602081830303815290604052604051610d609190611c4b565b602060405180830381855afa158015610d7d573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610da091906115aa565b9050919050565b60008082511415610dbd576000801b9050610dc5565b602082015190505b919050565b6000806000610dd8846110e2565b905060008160ff161415610e4057600084600081518110610e22577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b60f81c8060ff1690509250925050610ec1565b806001610e4d9190612086565b60ff1684511015610e85577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60009250925050610ec1565b6000610eb0610eab610ea660018560ff1689610ec69092919063ffffffff16565b611202565b611369565b905081818160ff1691509350935050505b915091565b60606000821415610ee857604051806020016040528060008152509050610f85565b60008284610ef69190612030565b90508381118015610f08575080855110155b610f47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3e90611f31565b60405180910390fd5b604051915082604083010160405282825283850182038460208701018481015b80821015610f8057815183830152602082019150610f67565b505050505b9392505050565b6000600982511015610fc0577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff905061106b565b6000610fe46008808551610fd49190612288565b85610ec69092919063ffffffff16565b9050600080610ff283610dca565b80925081935050507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561104d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff935050505061106b565b8082600961105b9190612030565b6110659190612030565b93505050505b919050565b600080828461107f9190612030565b90508381118015611091575080855110155b6110d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c790611f31565b60405180910390fd5b82846020870101209150509392505050565b600060ff82600081518110611120577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b60f81c60ff16141561114057600890506111fd565b60fe8260008151811061117c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b60f81c60ff16141561119c57600490506111fd565b60fd826000815181106111d8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b60f81c60ff1614156111f857600290506111fd565b600090505b919050565b60606000825167ffffffffffffffff811115611247577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156112795781602001600182028036833780820191505090505b50905060005b835181101561135f578381815181106112c1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b8260018387516112dc9190612288565b6112e69190612288565b8151811061131d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535080806113579061244a565b91505061127f565b5080915050919050565b60008060005b835181101561141d576001816113859190612030565b84516113919190612288565b600861139d919061222e565b60026113a99190612110565b8482815181106113e2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b60f81c60ff166113fd919061222e565b826114089190612030565b915080806114159061244a565b91505061136f565b5080915050919050565b600061143a61143584611fcd565b611fa8565b90508281526020810184848401111561145257600080fd5b61145d8482856123d7565b509392505050565b6000813590506114748161290a565b92915050565b60008135905061148981612921565b92915050565b60008151905061149e81612938565b92915050565b6000813590506114b38161294f565b92915050565b6000813590506114c881612966565b92915050565b600082601f8301126114df57600080fd5b81356114ef848260208601611427565b91505092915050565b60006080828403121561150a57600080fd5b81905092915050565b600060e0828403121561152557600080fd5b81905092915050565b60008135905061153d8161297d565b92915050565b60008135905061155281612994565b92915050565b60006020828403121561156a57600080fd5b600061157884828501611465565b91505092915050565b60006020828403121561159357600080fd5b60006115a18482850161147a565b91505092915050565b6000602082840312156115bc57600080fd5b60006115ca8482850161148f565b91505092915050565b6000602082840312156115e557600080fd5b60006115f3848285016114a4565b91505092915050565b60006020828403121561160e57600080fd5b600061161c848285016114b9565b91505092915050565b6000806000806080858703121561163b57600080fd5b600085013567ffffffffffffffff81111561165557600080fd5b611661878288016114f8565b945050602085013567ffffffffffffffff81111561167e57600080fd5b61168a878288016114ce565b935050604061169b8782880161152e565b925050606085013567ffffffffffffffff8111156116b857600080fd5b6116c4878288016114ce565b91505092959194509250565b60008061010083850312156116e457600080fd5b600083013567ffffffffffffffff8111156116fe57600080fd5b61170a858286016114f8565b925050602061171b85828601611513565b9150509250929050565b60006020828403121561173757600080fd5b60006117458482850161152e565b91505092915050565b60006020828403121561176057600080fd5b600061176e84828501611543565b91505092915050565b611780816122f0565b82525050565b611797611792826122f0565b612493565b82525050565b6117a681612302565b82525050565b6117bd6117b882612302565b6124a5565b82525050565b6117cc8161232e565b82525050565b6117e36117de8261232e565b6124af565b82525050565b6117f281612338565b82525050565b61180961180482612338565b6124b9565b82525050565b61181881612364565b82525050565b61182f61182a82612364565b6124c3565b82525050565b60006118418385612009565b935061184e8385846123d7565b82840190509392505050565b600061186582611ffe565b61186f8185612009565b935061187f8185602086016123e6565b80840191505092915050565b6000611898600183612025565b91506118a382612587565b600182019050919050565b60006118bb600183612025565b91506118c6826125b0565b600182019050919050565b60006118de600183612025565b91506118e9826125d9565b600182019050919050565b6000611901600183612025565b915061190c82612602565b600182019050919050565b6000611924602283612014565b915061192f8261262b565b604082019050919050565b6000611947601a83612014565b91506119528261267a565b602082019050919050565b600061196a600183612025565b9150611975826126a3565b600182019050919050565b600061198d600183612025565b9150611998826126cc565b600182019050919050565b60006119b0600183612025565b91506119bb826126f5565b600182019050919050565b60006119d3601983612014565b91506119de8261271e565b602082019050919050565b60006119f6601883612014565b9150611a0182612747565b602082019050919050565b6000611a19600183612025565b9150611a2482612770565b600182019050919050565b6000611a3c600183612025565b9150611a4782612799565b600182019050919050565b6000611a5f600183612025565b9150611a6a826127c2565b600182019050919050565b6000611a82601883612014565b9150611a8d826127eb565b602082019050919050565b6000611aa5601983612014565b9150611ab082612814565b602082019050919050565b6000611ac8600183612025565b9150611ad38261283d565b600182019050919050565b6000611aeb601183612014565b9150611af682612866565b602082019050919050565b6000611b0e601383612014565b9150611b198261288f565b602082019050919050565b6000611b31600183612025565b9150611b3c826128b8565b600182019050919050565b6000611b54600183612025565b9150611b5f826128e1565b600182019050919050565b611b73816123ba565b82525050565b611b82816123ca565b82525050565b611b99611b94826123ca565b6124df565b82525050565b6000611bab82846117ac565b60148201915081905092915050565b6000611bc682846117d2565b60208201915081905092915050565b6000611be182856117d2565b602082019150611bf18284611b88565b6001820191508190509392505050565b6000611c0d82896117f8565b600482019150611c1e828789611835565b9150611c2b828587611835565b9150611c3782846117f8565b600482019150819050979650505050505050565b6000611c57828461185a565b915081905092915050565b6000611c6d8261195d565b9150611c798288611786565b601482019150611c88826118f4565b9150611c9382611abb565b9150611c9f828761181e565b600882019150611cae826118f4565b9150611cb982611a2f565b9150611cc482611980565b9150611ccf8261195d565b9150611cdb82866117ac565b601482019150611cea82611a0c565b9150611cf58261188b565b9150611d0082611b47565b9150611d0b826118ae565b9150611d1682611a2f565b9150611d2182611980565b9150611d2c8261195d565b9150611d3882856117ac565b601482019150611d47826118d1565b9150611d5282611b24565b9150611d5e82846117f8565b600482019150611d6d826119a3565b9150611d78826118f4565b9150611d8382611b47565b9150611d8e82611a52565b91508190509695505050505050565b6000608082019050611db26000830187611777565b611dbf602083018661180f565b611dcc6040830185611b6a565b611dd96060830184611777565b95945050505050565b600060e082019050611df7600083018a6117c3565b611e046020830189611b79565b611e116040830188611777565b611e1e606083018761180f565b611e2b608083018661179d565b611e3860a083018561179d565b611e4560c08301846117e9565b98975050505050505050565b60006020820190508181036000830152611e6a81611917565b9050919050565b60006020820190508181036000830152611e8a8161193a565b9050919050565b60006020820190508181036000830152611eaa816119c6565b9050919050565b60006020820190508181036000830152611eca816119e9565b9050919050565b60006020820190508181036000830152611eea81611a75565b9050919050565b60006020820190508181036000830152611f0a81611a98565b9050919050565b60006020820190508181036000830152611f2a81611ade565b9050919050565b60006020820190508181036000830152611f4a81611b01565b9050919050565b60008083356001602003843603038112611f6a57600080fd5b80840192508235915067ffffffffffffffff821115611f8857600080fd5b602083019250600182023603831315611fa057600080fd5b509250929050565b6000611fb2611fc3565b9050611fbe8282612419565b919050565b6000604051905090565b600067ffffffffffffffff821115611fe857611fe7612520565b5b611ff18261254f565b9050602081019050919050565b600081519050919050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061203b826123b0565b9150612046836123b0565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561207b5761207a6124f1565b5b828201905092915050565b6000612091826123ca565b915061209c836123ca565b92508260ff038211156120b2576120b16124f1565b5b828201905092915050565b6000808291508390505b6001851115612107578086048111156120e3576120e26124f1565b5b60018516156120f25780820291505b80810290506121008561257a565b94506120c7565b94509492505050565b600061211b826123b0565b9150612126836123b0565b92506121537fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848461215b565b905092915050565b60008261216b5760019050612227565b816121795760009050612227565b816001811461218f5760028114612199576121c8565b6001915050612227565b60ff8411156121ab576121aa6124f1565b5b8360020a9150848211156121c2576121c16124f1565b5b50612227565b5060208310610133831016604e8410600b84101617156121fd5782820a9050838111156121f8576121f76124f1565b5b612227565b61220a84848460016120bd565b92509050818404811115612221576122206124f1565b5b81810290505b9392505050565b6000612239826123b0565b9150612244836123b0565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561227d5761227c6124f1565b5b828202905092915050565b6000612293826123b0565b915061229e836123b0565b9250828210156122b1576122b06124f1565b5b828203905092915050565b60006122c7826123ca565b91506122d2836123ca565b9250828210156122e5576122e46124f1565b5b828203905092915050565b60006122fb82612390565b9050919050565b60007fffffffffffffffffffffffffffffffffffffffff00000000000000000000000082169050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60007fffffffffffffffff00000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b838110156124045780820151818401526020810190506123e9565b83811115612413576000848401525b50505050565b6124228261254f565b810181811067ffffffffffffffff8211171561244157612440612520565b5b80604052505050565b6000612455826123b0565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612488576124876124f1565b5b600182019050919050565b600061249e826124cd565b9050919050565b6000819050919050565b6000819050919050565b6000819050919050565b6000819050919050565b60006124d88261256d565b9050919050565b60006124ea82612560565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160f81b9050919050565b60008160601b9050919050565b60008160011c9050919050565b7f6300000000000000000000000000000000000000000000000000000000000000600082015250565b7f6700000000000000000000000000000000000000000000000000000000000000600082015250565b7f8800000000000000000000000000000000000000000000000000000000000000600082015250565b7f7500000000000000000000000000000000000000000000000000000000000000600082015250565b7f52656164206f76657272756e20647572696e6720566172496e7420706172736960008201527f6e67000000000000000000000000000000000000000000000000000000000000602082015250565b7f42616420566172496e7420696e207363726970745075626b6579000000000000600082015250565b7f1400000000000000000000000000000000000000000000000000000000000000600082015250565b7fa900000000000000000000000000000000000000000000000000000000000000600082015250565b7fb100000000000000000000000000000000000000000000000000000000000000600082015250565b7f57726f6e672033322d6279746520736372697074206861736800000000000000600082015250565b7f57726f6e67207363726970742068617368206c656e6774680000000000000000600082015250565b7f8700000000000000000000000000000000000000000000000000000000000000600082015250565b7f7600000000000000000000000000000000000000000000000000000000000000600082015250565b7f6800000000000000000000000000000000000000000000000000000000000000600082015250565b7f4465706f73697420616c72656164792072657665616c65640000000000000000600082015250565b7f57726f6e672032302d6279746520736372697074206861736800000000000000600082015250565b7f0800000000000000000000000000000000000000000000000000000000000000600082015250565b7f566f75742072656164206f76657272756e000000000000000000000000000000600082015250565b7f536c696365206f7574206f6620626f756e647300000000000000000000000000600082015250565b7f0400000000000000000000000000000000000000000000000000000000000000600082015250565b7fac00000000000000000000000000000000000000000000000000000000000000600082015250565b612913816122f0565b811461291e57600080fd5b50565b61292a81612302565b811461293557600080fd5b50565b6129418161232e565b811461294c57600080fd5b50565b61295881612338565b811461296357600080fd5b50565b61296f81612364565b811461297a57600080fd5b50565b612986816123b0565b811461299157600080fd5b50565b61299d816123ca565b81146129a857600080fd5b5056fea26469706673582212208ee8759d3087139de74e849409c59faaa977baa9abb4bc4a6e2534070ac731a464736f6c63430008040033",
218
- "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100415760003560e01c806325750db71461004657806343c6de29146100625780638d658d4e14610095575b600080fd5b610060600480360381019061005b91906116d0565b6100b1565b005b61007c60048036038101906100779190611725565b61059f565b60405161008c9493929190611d9d565b60405180910390f35b6100af60048036038101906100aa9190611625565b61062c565b005b60008160200160208101906100c69190611558565b8260400160208101906100d991906115fc565b8360600160208101906100ec9190611581565b8460800160208101906100ff9190611581565b8560a001602081019061011291906115d3565b604051602001610126959493929190611c62565b604051602081830303815290604052905060006101b383600001602081019061014f919061174e565b60ff168580604001906101629190611f51565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061063290919063ffffffff16565b905060006101c082610872565b9050601481511415610229576101d583610c14565b80519060200120818051906020012014610224576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161021b90611ef1565b60405180910390fd5b6102c6565b60208151141561028a5761023c83610ce1565b61024582610da7565b14610285576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161027c90611e91565b60405180910390fd5b6102c5565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102bc90611eb1565b60405180910390fd5b5b600061033a8660000160208101906102de91906115d3565b8780602001906102ee9190611f51565b8980604001906102fe9190611f51565b8b606001602081019061031191906115d3565b60405160200161032696959493929190611c01565b604051602081830303815290604052610ce1565b9050600080600083886000016020810190610355919061174e565b604051602001610366929190611bd5565b6040516020818303038152906040528051906020012060001c81526020019081526020016000209050600081600001601c9054906101000a900463ffffffff1663ffffffff16146103ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103e390611ed1565b60405180910390fd5b600060208501519050808260000160146101000a81548167ffffffffffffffff021916908360c01c021790555086602001602081019061042c9190611558565b8260000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055504282600001601c6101000a81548163ffffffff021916908363ffffffff1602179055508660c00160208101906104a49190611558565b8260010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fa62fd60993aa217b6f00fbb6f377e73a7bbf09f76e730ca9c99f9d54edddc7e88388600001602081019061051b919061174e565b89602001602081019061052e9190611558565b8a604001602081019061054191906115fc565b8b60600160208101906105549190611581565b8c60800160208101906105679190611581565b8d60a001602081019061057a91906115d3565b60405161058d9796959493929190611de2565b60405180910390a15050505050505050565b60006020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060000160149054906101000a900460c01b9080600001601c9054906101000a900463ffffffff16908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905084565b50505050565b606060008061064085610dca565b80925081935050507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156106ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a290611e51565b60405180910390fd5b8084106106ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106e490611f11565b60405180910390fd5b60606000808460016106ff9190612030565b905060005b878110156107be5761072d82838b5161071d9190612288565b8b610ec69092919063ffffffff16565b935061073884610f8c565b92507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83141561079d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161079490611e71565b60405180910390fd5b82826107a99190612030565b915080806107b69061244a565b915050610704565b506107e081828a516107d09190612288565b8a610ec69092919063ffffffff16565b92506107eb83610f8c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415610850576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084790611e71565b60405180910390fd5b61086581838a610ec69092919063ffffffff16565b9550505050505092915050565b60606000826008815181106108b0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b60f81c905082516009826108cf9190612086565b60ff16146108ef5760405180602001604052806000815250915050610c0f565b60008360098151811061092b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b60f81c60ff161415610a1e5760028160ff1610156109665760405180602001604052806000815250915050610c0f565b600083600a815181106109a2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b60f81c60ff1690506002826109c291906122bc565b60ff16811415806109e15750602081141580156109e0575060148114155b5b156109ff576040518060200160405280600081525092505050610c0f565b610a15600b8286610ec69092919063ffffffff16565b92505050610c0f565b6000610a3760086003866110709092919063ffffffff16565b90507fe1683aec1a10d43657f3f2c82e683d8e19e8a3f320ce9d3bf22c6ca6ab4cbce6811415610b3b57601484600b81518110610a9d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b60f81c60ff16141580610afd57507f3b50b2715f5a28d2a7eeb517f17ec797e8536bd425bf31fc4f6bf7ce1e34b77d610afa60028651610ae89190612288565b6002876110709092919063ffffffff16565b14155b15610b1b576040518060200160405280600081525092505050610c0f565b610b32600c601486610ec69092919063ffffffff16565b92505050610c0f565b7fa0916ee0b243ee20fb4ce56170744d86b54d7ae03a418a7a12156f40dedcf7d7811415610bfa5760878460018651610b749190612288565b81518110610bab577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b60f81c60ff1614610bda576040518060200160405280600081525092505050610c0f565b610bf1600b601486610ec69092919063ffffffff16565b92505050610c0f565b50604051806020016040528060008152509150505b919050565b60606003600283604051610c289190611c4b565b602060405180830381855afa158015610c45573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610c6891906115aa565b604051602001610c789190611bba565b604051602081830303815290604052604051610c949190611c4b565b602060405180830381855afa158015610cb1573d6000803e3d6000fd5b5050506040515160601b604051602001610ccb9190611b9f565b6040516020818303038152906040529050919050565b600060028083604051610cf49190611c4b565b602060405180830381855afa158015610d11573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610d3491906115aa565b604051602001610d449190611bba565b604051602081830303815290604052604051610d609190611c4b565b602060405180830381855afa158015610d7d573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610da091906115aa565b9050919050565b60008082511415610dbd576000801b9050610dc5565b602082015190505b919050565b6000806000610dd8846110e2565b905060008160ff161415610e4057600084600081518110610e22577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b60f81c8060ff1690509250925050610ec1565b806001610e4d9190612086565b60ff1684511015610e85577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60009250925050610ec1565b6000610eb0610eab610ea660018560ff1689610ec69092919063ffffffff16565b611202565b611369565b905081818160ff1691509350935050505b915091565b60606000821415610ee857604051806020016040528060008152509050610f85565b60008284610ef69190612030565b90508381118015610f08575080855110155b610f47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3e90611f31565b60405180910390fd5b604051915082604083010160405282825283850182038460208701018481015b80821015610f8057815183830152602082019150610f67565b505050505b9392505050565b6000600982511015610fc0577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff905061106b565b6000610fe46008808551610fd49190612288565b85610ec69092919063ffffffff16565b9050600080610ff283610dca565b80925081935050507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561104d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff935050505061106b565b8082600961105b9190612030565b6110659190612030565b93505050505b919050565b600080828461107f9190612030565b90508381118015611091575080855110155b6110d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c790611f31565b60405180910390fd5b82846020870101209150509392505050565b600060ff82600081518110611120577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b60f81c60ff16141561114057600890506111fd565b60fe8260008151811061117c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b60f81c60ff16141561119c57600490506111fd565b60fd826000815181106111d8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b60f81c60ff1614156111f857600290506111fd565b600090505b919050565b60606000825167ffffffffffffffff811115611247577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156112795781602001600182028036833780820191505090505b50905060005b835181101561135f578381815181106112c1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b8260018387516112dc9190612288565b6112e69190612288565b8151811061131d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535080806113579061244a565b91505061127f565b5080915050919050565b60008060005b835181101561141d576001816113859190612030565b84516113919190612288565b600861139d919061222e565b60026113a99190612110565b8482815181106113e2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b60f81c60ff166113fd919061222e565b826114089190612030565b915080806114159061244a565b91505061136f565b5080915050919050565b600061143a61143584611fcd565b611fa8565b90508281526020810184848401111561145257600080fd5b61145d8482856123d7565b509392505050565b6000813590506114748161290a565b92915050565b60008135905061148981612921565b92915050565b60008151905061149e81612938565b92915050565b6000813590506114b38161294f565b92915050565b6000813590506114c881612966565b92915050565b600082601f8301126114df57600080fd5b81356114ef848260208601611427565b91505092915050565b60006080828403121561150a57600080fd5b81905092915050565b600060e0828403121561152557600080fd5b81905092915050565b60008135905061153d8161297d565b92915050565b60008135905061155281612994565b92915050565b60006020828403121561156a57600080fd5b600061157884828501611465565b91505092915050565b60006020828403121561159357600080fd5b60006115a18482850161147a565b91505092915050565b6000602082840312156115bc57600080fd5b60006115ca8482850161148f565b91505092915050565b6000602082840312156115e557600080fd5b60006115f3848285016114a4565b91505092915050565b60006020828403121561160e57600080fd5b600061161c848285016114b9565b91505092915050565b6000806000806080858703121561163b57600080fd5b600085013567ffffffffffffffff81111561165557600080fd5b611661878288016114f8565b945050602085013567ffffffffffffffff81111561167e57600080fd5b61168a878288016114ce565b935050604061169b8782880161152e565b925050606085013567ffffffffffffffff8111156116b857600080fd5b6116c4878288016114ce565b91505092959194509250565b60008061010083850312156116e457600080fd5b600083013567ffffffffffffffff8111156116fe57600080fd5b61170a858286016114f8565b925050602061171b85828601611513565b9150509250929050565b60006020828403121561173757600080fd5b60006117458482850161152e565b91505092915050565b60006020828403121561176057600080fd5b600061176e84828501611543565b91505092915050565b611780816122f0565b82525050565b611797611792826122f0565b612493565b82525050565b6117a681612302565b82525050565b6117bd6117b882612302565b6124a5565b82525050565b6117cc8161232e565b82525050565b6117e36117de8261232e565b6124af565b82525050565b6117f281612338565b82525050565b61180961180482612338565b6124b9565b82525050565b61181881612364565b82525050565b61182f61182a82612364565b6124c3565b82525050565b60006118418385612009565b935061184e8385846123d7565b82840190509392505050565b600061186582611ffe565b61186f8185612009565b935061187f8185602086016123e6565b80840191505092915050565b6000611898600183612025565b91506118a382612587565b600182019050919050565b60006118bb600183612025565b91506118c6826125b0565b600182019050919050565b60006118de600183612025565b91506118e9826125d9565b600182019050919050565b6000611901600183612025565b915061190c82612602565b600182019050919050565b6000611924602283612014565b915061192f8261262b565b604082019050919050565b6000611947601a83612014565b91506119528261267a565b602082019050919050565b600061196a600183612025565b9150611975826126a3565b600182019050919050565b600061198d600183612025565b9150611998826126cc565b600182019050919050565b60006119b0600183612025565b91506119bb826126f5565b600182019050919050565b60006119d3601983612014565b91506119de8261271e565b602082019050919050565b60006119f6601883612014565b9150611a0182612747565b602082019050919050565b6000611a19600183612025565b9150611a2482612770565b600182019050919050565b6000611a3c600183612025565b9150611a4782612799565b600182019050919050565b6000611a5f600183612025565b9150611a6a826127c2565b600182019050919050565b6000611a82601883612014565b9150611a8d826127eb565b602082019050919050565b6000611aa5601983612014565b9150611ab082612814565b602082019050919050565b6000611ac8600183612025565b9150611ad38261283d565b600182019050919050565b6000611aeb601183612014565b9150611af682612866565b602082019050919050565b6000611b0e601383612014565b9150611b198261288f565b602082019050919050565b6000611b31600183612025565b9150611b3c826128b8565b600182019050919050565b6000611b54600183612025565b9150611b5f826128e1565b600182019050919050565b611b73816123ba565b82525050565b611b82816123ca565b82525050565b611b99611b94826123ca565b6124df565b82525050565b6000611bab82846117ac565b60148201915081905092915050565b6000611bc682846117d2565b60208201915081905092915050565b6000611be182856117d2565b602082019150611bf18284611b88565b6001820191508190509392505050565b6000611c0d82896117f8565b600482019150611c1e828789611835565b9150611c2b828587611835565b9150611c3782846117f8565b600482019150819050979650505050505050565b6000611c57828461185a565b915081905092915050565b6000611c6d8261195d565b9150611c798288611786565b601482019150611c88826118f4565b9150611c9382611abb565b9150611c9f828761181e565b600882019150611cae826118f4565b9150611cb982611a2f565b9150611cc482611980565b9150611ccf8261195d565b9150611cdb82866117ac565b601482019150611cea82611a0c565b9150611cf58261188b565b9150611d0082611b47565b9150611d0b826118ae565b9150611d1682611a2f565b9150611d2182611980565b9150611d2c8261195d565b9150611d3882856117ac565b601482019150611d47826118d1565b9150611d5282611b24565b9150611d5e82846117f8565b600482019150611d6d826119a3565b9150611d78826118f4565b9150611d8382611b47565b9150611d8e82611a52565b91508190509695505050505050565b6000608082019050611db26000830187611777565b611dbf602083018661180f565b611dcc6040830185611b6a565b611dd96060830184611777565b95945050505050565b600060e082019050611df7600083018a6117c3565b611e046020830189611b79565b611e116040830188611777565b611e1e606083018761180f565b611e2b608083018661179d565b611e3860a083018561179d565b611e4560c08301846117e9565b98975050505050505050565b60006020820190508181036000830152611e6a81611917565b9050919050565b60006020820190508181036000830152611e8a8161193a565b9050919050565b60006020820190508181036000830152611eaa816119c6565b9050919050565b60006020820190508181036000830152611eca816119e9565b9050919050565b60006020820190508181036000830152611eea81611a75565b9050919050565b60006020820190508181036000830152611f0a81611a98565b9050919050565b60006020820190508181036000830152611f2a81611ade565b9050919050565b60006020820190508181036000830152611f4a81611b01565b9050919050565b60008083356001602003843603038112611f6a57600080fd5b80840192508235915067ffffffffffffffff821115611f8857600080fd5b602083019250600182023603831315611fa057600080fd5b509250929050565b6000611fb2611fc3565b9050611fbe8282612419565b919050565b6000604051905090565b600067ffffffffffffffff821115611fe857611fe7612520565b5b611ff18261254f565b9050602081019050919050565b600081519050919050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061203b826123b0565b9150612046836123b0565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561207b5761207a6124f1565b5b828201905092915050565b6000612091826123ca565b915061209c836123ca565b92508260ff038211156120b2576120b16124f1565b5b828201905092915050565b6000808291508390505b6001851115612107578086048111156120e3576120e26124f1565b5b60018516156120f25780820291505b80810290506121008561257a565b94506120c7565b94509492505050565b600061211b826123b0565b9150612126836123b0565b92506121537fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848461215b565b905092915050565b60008261216b5760019050612227565b816121795760009050612227565b816001811461218f5760028114612199576121c8565b6001915050612227565b60ff8411156121ab576121aa6124f1565b5b8360020a9150848211156121c2576121c16124f1565b5b50612227565b5060208310610133831016604e8410600b84101617156121fd5782820a9050838111156121f8576121f76124f1565b5b612227565b61220a84848460016120bd565b92509050818404811115612221576122206124f1565b5b81810290505b9392505050565b6000612239826123b0565b9150612244836123b0565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561227d5761227c6124f1565b5b828202905092915050565b6000612293826123b0565b915061229e836123b0565b9250828210156122b1576122b06124f1565b5b828203905092915050565b60006122c7826123ca565b91506122d2836123ca565b9250828210156122e5576122e46124f1565b5b828203905092915050565b60006122fb82612390565b9050919050565b60007fffffffffffffffffffffffffffffffffffffffff00000000000000000000000082169050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60007fffffffffffffffff00000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b838110156124045780820151818401526020810190506123e9565b83811115612413576000848401525b50505050565b6124228261254f565b810181811067ffffffffffffffff8211171561244157612440612520565b5b80604052505050565b6000612455826123b0565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612488576124876124f1565b5b600182019050919050565b600061249e826124cd565b9050919050565b6000819050919050565b6000819050919050565b6000819050919050565b6000819050919050565b60006124d88261256d565b9050919050565b60006124ea82612560565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160f81b9050919050565b60008160601b9050919050565b60008160011c9050919050565b7f6300000000000000000000000000000000000000000000000000000000000000600082015250565b7f6700000000000000000000000000000000000000000000000000000000000000600082015250565b7f8800000000000000000000000000000000000000000000000000000000000000600082015250565b7f7500000000000000000000000000000000000000000000000000000000000000600082015250565b7f52656164206f76657272756e20647572696e6720566172496e7420706172736960008201527f6e67000000000000000000000000000000000000000000000000000000000000602082015250565b7f42616420566172496e7420696e207363726970745075626b6579000000000000600082015250565b7f1400000000000000000000000000000000000000000000000000000000000000600082015250565b7fa900000000000000000000000000000000000000000000000000000000000000600082015250565b7fb100000000000000000000000000000000000000000000000000000000000000600082015250565b7f57726f6e672033322d6279746520736372697074206861736800000000000000600082015250565b7f57726f6e67207363726970742068617368206c656e6774680000000000000000600082015250565b7f8700000000000000000000000000000000000000000000000000000000000000600082015250565b7f7600000000000000000000000000000000000000000000000000000000000000600082015250565b7f6800000000000000000000000000000000000000000000000000000000000000600082015250565b7f4465706f73697420616c72656164792072657665616c65640000000000000000600082015250565b7f57726f6e672032302d6279746520736372697074206861736800000000000000600082015250565b7f0800000000000000000000000000000000000000000000000000000000000000600082015250565b7f566f75742072656164206f76657272756e000000000000000000000000000000600082015250565b7f536c696365206f7574206f6620626f756e647300000000000000000000000000600082015250565b7f0400000000000000000000000000000000000000000000000000000000000000600082015250565b7fac00000000000000000000000000000000000000000000000000000000000000600082015250565b612913816122f0565b811461291e57600080fd5b50565b61292a81612302565b811461293557600080fd5b50565b6129418161232e565b811461294c57600080fd5b50565b61295881612338565b811461296357600080fd5b50565b61296f81612364565b811461297a57600080fd5b50565b612986816123b0565b811461299157600080fd5b50565b61299d816123ca565b81146129a857600080fd5b5056fea26469706673582212208ee8759d3087139de74e849409c59faaa977baa9abb4bc4a6e2534070ac731a464736f6c63430008040033",
331
+ "bytecode": "0x60806040523480156200001157600080fd5b5062000032620000266200003860201b60201c565b6200004060201b60201c565b62000104565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6131a080620001146000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c80638d658d4e1161005b5780638d658d4e146101025780638da5cb5b1461011e578063e53c0b551461013c578063f2fde38b1461016c57610088565b806325750db71461008d57806343c6de29146100a957806360d712fc146100dc578063715018a6146100f8575b600080fd5b6100a760048036038101906100a29190611cae565b610188565b005b6100c360048036038101906100be9190611d03565b610772565b6040516100d3949392919061240e565b60405180910390f35b6100f660048036038101906100f19190611b23565b6107ff565b005b610100610924565b005b61011c60048036038101906101179190611c03565b6109ac565b005b6101266109b2565b60405161013391906123f3565b60405180910390f35b61015660048036038101906101519190611afa565b6109db565b6040516101639190612453565b60405180910390f35b61018660048036038101906101819190611afa565b6109fb565b005b600073ffffffffffffffffffffffffffffffffffffffff168160c00160208101906101b39190611afa565b73ffffffffffffffffffffffffffffffffffffffff1614806102305750600160008260c00160208101906101e79190611afa565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61026f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102669061254c565b60405180910390fd5b60008160200160208101906102849190611afa565b8260400160208101906102979190611bda565b8360600160208101906102aa9190611b5f565b8460800160208101906102bd9190611b5f565b8560a00160208101906102d09190611bb1565b6040516020016102e49594939291906122b8565b6040516020818303038152906040529050600061037183600001602081019061030d9190611d2c565b60ff16858060400190610320919061264c565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050610af390919063ffffffff16565b9050600061037e82610d33565b90506014815114156103e757610393836110d5565b805190602001208180519060200120146103e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103d9906125ec565b60405180910390fd5b610484565b602081511415610448576103fa836111a2565b61040382611268565b14610443576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161043a9061256c565b60405180910390fd5b610483565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161047a9061258c565b60405180910390fd5b5b60006104f886600001602081019061049c9190611bb1565b8780602001906104ac919061264c565b8980604001906104bc919061264c565b8b60600160208101906104cf9190611bb1565b6040516020016104e496959493929190612257565b6040516020818303038152906040526111a2565b9050600060026000838860000160208101906105149190611d2c565b60405160200161052592919061222b565b6040516020818303038152906040528051906020012060001c81526020019081526020016000209050600081600001601c9054906101000a900463ffffffff1663ffffffff16146105ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105a2906125cc565b60405180910390fd5b600060208501519050808260000160146101000a81548167ffffffffffffffff021916908360c01c02179055508660200160208101906105eb9190611afa565b8260000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055504282600001601c6101000a81548163ffffffff021916908363ffffffff1602179055508660c00160208101906106639190611afa565b8260010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f293519c6fe266b8b9ca154d153e408c6ef03135a5abeb42e9a91781d620ca47b838860000160208101906106da9190611d2c565b8960200160208101906106ed9190611afa565b8a60400160208101906107009190611bda565b8b60600160208101906107139190611b5f565b8c60800160208101906107269190611b5f565b8d60a00160208101906107399190611bb1565b8e60c001602081019061074c9190611afa565b60405161076098979695949392919061246e565b60405180910390a15050505050505050565b60026020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060000160149054906101000a900460c01b9080600001601c9054906101000a900463ffffffff16908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905084565b61080761128b565b73ffffffffffffffffffffffffffffffffffffffff166108256109b2565b73ffffffffffffffffffffffffffffffffffffffff161461087b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610872906125ac565b60405180910390fd5b80600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9065599c12c4294d9e2201638226d0d0beb95c228f468c4e7c2bdb8322b6066f826040516109189190612453565b60405180910390a25050565b61092c61128b565b73ffffffffffffffffffffffffffffffffffffffff1661094a6109b2565b73ffffffffffffffffffffffffffffffffffffffff16146109a0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610997906125ac565b60405180910390fd5b6109aa6000611293565b565b50505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60016020528060005260406000206000915054906101000a900460ff1681565b610a0361128b565b73ffffffffffffffffffffffffffffffffffffffff16610a216109b2565b73ffffffffffffffffffffffffffffffffffffffff1614610a77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6e906125ac565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610ae7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ade906124ec565b60405180910390fd5b610af081611293565b50565b6060600080610b0185611357565b80925081935050507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415610b6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b639061250c565b60405180910390fd5b808410610bae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba59061260c565b60405180910390fd5b6060600080846001610bc0919061272b565b905060005b87811015610c7f57610bee82838b51610bde9190612983565b8b6114539092919063ffffffff16565b9350610bf984611519565b92507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831415610c5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c559061252c565b60405180910390fd5b8282610c6a919061272b565b91508080610c7790612b51565b915050610bc5565b50610ca181828a51610c919190612983565b8a6114539092919063ffffffff16565b9250610cac83611519565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415610d11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d089061252c565b60405180910390fd5b610d2681838a6114539092919063ffffffff16565b9550505050505092915050565b6060600082600881518110610d71577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b60f81c90508251600982610d909190612781565b60ff1614610db057604051806020016040528060008152509150506110d0565b600083600981518110610dec577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b60f81c60ff161415610edf5760028160ff161015610e2757604051806020016040528060008152509150506110d0565b600083600a81518110610e63577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b60f81c60ff169050600282610e8391906129b7565b60ff1681141580610ea2575060208114158015610ea1575060148114155b5b15610ec05760405180602001604052806000815250925050506110d0565b610ed6600b82866114539092919063ffffffff16565b925050506110d0565b6000610ef860086003866115fd9092919063ffffffff16565b90507fe1683aec1a10d43657f3f2c82e683d8e19e8a3f320ce9d3bf22c6ca6ab4cbce6811415610ffc57601484600b81518110610f5e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b60f81c60ff16141580610fbe57507f3b50b2715f5a28d2a7eeb517f17ec797e8536bd425bf31fc4f6bf7ce1e34b77d610fbb60028651610fa99190612983565b6002876115fd9092919063ffffffff16565b14155b15610fdc5760405180602001604052806000815250925050506110d0565b610ff3600c6014866114539092919063ffffffff16565b925050506110d0565b7fa0916ee0b243ee20fb4ce56170744d86b54d7ae03a418a7a12156f40dedcf7d78114156110bb57608784600186516110359190612983565b8151811061106c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b60f81c60ff161461109b5760405180602001604052806000815250925050506110d0565b6110b2600b6014866114539092919063ffffffff16565b925050506110d0565b50604051806020016040528060008152509150505b919050565b606060036002836040516110e991906122a1565b602060405180830381855afa158015611106573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906111299190611b88565b6040516020016111399190612210565b60405160208183030381529060405260405161115591906122a1565b602060405180830381855afa158015611172573d6000803e3d6000fd5b5050506040515160601b60405160200161118c91906121f5565b6040516020818303038152906040529050919050565b6000600280836040516111b591906122a1565b602060405180830381855afa1580156111d2573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906111f59190611b88565b6040516020016112059190612210565b60405160208183030381529060405260405161122191906122a1565b602060405180830381855afa15801561123e573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906112619190611b88565b9050919050565b6000808251141561127e576000801b9050611286565b602082015190505b919050565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008060006113658461166f565b905060008160ff1614156113cd576000846000815181106113af577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b60f81c8060ff169050925092505061144e565b8060016113da9190612781565b60ff1684511015611412577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6000925092505061144e565b600061143d61143861143360018560ff16896114539092919063ffffffff16565b61178f565b6118f6565b905081818160ff1691509350935050505b915091565b6060600082141561147557604051806020016040528060008152509050611512565b60008284611483919061272b565b90508381118015611495575080855110155b6114d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114cb9061262c565b60405180910390fd5b604051915082604083010160405282825283850182038460208701018481015b8082101561150d578151838301526020820191506114f4565b505050505b9392505050565b600060098251101561154d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90506115f8565b600061157160088085516115619190612983565b856114539092919063ffffffff16565b905060008061157f83611357565b80925081935050507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156115da577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff93505050506115f8565b808260096115e8919061272b565b6115f2919061272b565b93505050505b919050565b600080828461160c919061272b565b9050838111801561161e575080855110155b61165d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116549061262c565b60405180910390fd5b82846020870101209150509392505050565b600060ff826000815181106116ad577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b60f81c60ff1614156116cd576008905061178a565b60fe82600081518110611709577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b60f81c60ff161415611729576004905061178a565b60fd82600081518110611765577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b60f81c60ff161415611785576002905061178a565b600090505b919050565b60606000825167ffffffffffffffff8111156117d4577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156118065781602001600182028036833780820191505090505b50905060005b83518110156118ec5783818151811061184e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b8260018387516118699190612983565b6118739190612983565b815181106118aa577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535080806118e490612b51565b91505061180c565b5080915050919050565b60008060005b83518110156119aa57600181611912919061272b565b845161191e9190612983565b600861192a9190612929565b6002611936919061280b565b84828151811061196f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b60f81c60ff1661198a9190612929565b82611995919061272b565b915080806119a290612b51565b9150506118fc565b5080915050919050565b60006119c76119c2846126c8565b6126a3565b9050828152602081018484840111156119df57600080fd5b6119ea848285612ade565b509392505050565b600081359050611a01816130b2565b92915050565b600081359050611a16816130c9565b92915050565b600081359050611a2b816130e0565b92915050565b600081519050611a40816130f7565b92915050565b600081359050611a558161310e565b92915050565b600081359050611a6a81613125565b92915050565b600082601f830112611a8157600080fd5b8135611a918482602086016119b4565b91505092915050565b600060808284031215611aac57600080fd5b81905092915050565b600060e08284031215611ac757600080fd5b81905092915050565b600081359050611adf8161313c565b92915050565b600081359050611af481613153565b92915050565b600060208284031215611b0c57600080fd5b6000611b1a848285016119f2565b91505092915050565b60008060408385031215611b3657600080fd5b6000611b44858286016119f2565b9250506020611b5585828601611a07565b9150509250929050565b600060208284031215611b7157600080fd5b6000611b7f84828501611a1c565b91505092915050565b600060208284031215611b9a57600080fd5b6000611ba884828501611a31565b91505092915050565b600060208284031215611bc357600080fd5b6000611bd184828501611a46565b91505092915050565b600060208284031215611bec57600080fd5b6000611bfa84828501611a5b565b91505092915050565b60008060008060808587031215611c1957600080fd5b600085013567ffffffffffffffff811115611c3357600080fd5b611c3f87828801611a9a565b945050602085013567ffffffffffffffff811115611c5c57600080fd5b611c6887828801611a70565b9350506040611c7987828801611ad0565b925050606085013567ffffffffffffffff811115611c9657600080fd5b611ca287828801611a70565b91505092959194509250565b6000806101008385031215611cc257600080fd5b600083013567ffffffffffffffff811115611cdc57600080fd5b611ce885828601611a9a565b9250506020611cf985828601611ab5565b9150509250929050565b600060208284031215611d1557600080fd5b6000611d2384828501611ad0565b91505092915050565b600060208284031215611d3e57600080fd5b6000611d4c84828501611ae5565b91505092915050565b611d5e816129eb565b82525050565b611d75611d70826129eb565b612b9a565b82525050565b611d84816129fd565b82525050565b611d9381612a09565b82525050565b611daa611da582612a09565b612bac565b82525050565b611db981612a35565b82525050565b611dd0611dcb82612a35565b612bb6565b82525050565b611ddf81612a3f565b82525050565b611df6611df182612a3f565b612bc0565b82525050565b611e0581612a6b565b82525050565b611e1c611e1782612a6b565b612bca565b82525050565b6000611e2e8385612704565b9350611e3b838584612ade565b82840190509392505050565b6000611e52826126f9565b611e5c8185612704565b9350611e6c818560208601612aed565b80840191505092915050565b6000611e85600183612720565b9150611e9082612c8e565b600182019050919050565b6000611ea8600183612720565b9150611eb382612cb7565b600182019050919050565b6000611ecb60268361270f565b9150611ed682612ce0565b604082019050919050565b6000611eee600183612720565b9150611ef982612d2f565b600182019050919050565b6000611f11600183612720565b9150611f1c82612d58565b600182019050919050565b6000611f3460228361270f565b9150611f3f82612d81565b604082019050919050565b6000611f57601a8361270f565b9150611f6282612dd0565b602082019050919050565b6000611f7a600183612720565b9150611f8582612df9565b600182019050919050565b6000611f9d60148361270f565b9150611fa882612e22565b602082019050919050565b6000611fc0600183612720565b9150611fcb82612e4b565b600182019050919050565b6000611fe3600183612720565b9150611fee82612e74565b600182019050919050565b600061200660198361270f565b915061201182612e9d565b602082019050919050565b600061202960188361270f565b915061203482612ec6565b602082019050919050565b600061204c600183612720565b915061205782612eef565b600182019050919050565b600061206f60208361270f565b915061207a82612f18565b602082019050919050565b6000612092600183612720565b915061209d82612f41565b600182019050919050565b60006120b5600183612720565b91506120c082612f6a565b600182019050919050565b60006120d860188361270f565b91506120e382612f93565b602082019050919050565b60006120fb60198361270f565b915061210682612fbc565b602082019050919050565b600061211e600183612720565b915061212982612fe5565b600182019050919050565b600061214160118361270f565b915061214c8261300e565b602082019050919050565b600061216460138361270f565b915061216f82613037565b602082019050919050565b6000612187600183612720565b915061219282613060565b600182019050919050565b60006121aa600183612720565b91506121b582613089565b600182019050919050565b6121c981612ac1565b82525050565b6121d881612ad1565b82525050565b6121ef6121ea82612ad1565b612be6565b82525050565b60006122018284611d99565b60148201915081905092915050565b600061221c8284611dbf565b60208201915081905092915050565b60006122378285611dbf565b60208201915061224782846121de565b6001820191508190509392505050565b60006122638289611de5565b600482019150612274828789611e22565b9150612281828587611e22565b915061228d8284611de5565b600482019150819050979650505050505050565b60006122ad8284611e47565b915081905092915050565b60006122c382611f6d565b91506122cf8288611d64565b6014820191506122de82611f04565b91506122e982612111565b91506122f58287611e0b565b60088201915061230482611f04565b915061230f82612085565b915061231a82611fb3565b915061232582611f6d565b91506123318286611d99565b6014820191506123408261203f565b915061234b82611e78565b91506123568261219d565b915061236182611e9b565b915061236c82612085565b915061237782611fb3565b915061238282611f6d565b915061238e8285611d99565b60148201915061239d82611ee1565b91506123a88261217a565b91506123b48284611de5565b6004820191506123c382611fd6565b91506123ce82611f04565b91506123d98261219d565b91506123e4826120a8565b91508190509695505050505050565b60006020820190506124086000830184611d55565b92915050565b60006080820190506124236000830187611d55565b6124306020830186611dfc565b61243d60408301856121c0565b61244a6060830184611d55565b95945050505050565b60006020820190506124686000830184611d7b565b92915050565b600061010082019050612484600083018b611db0565b612491602083018a6121cf565b61249e6040830189611d55565b6124ab6060830188611dfc565b6124b86080830187611d8a565b6124c560a0830186611d8a565b6124d260c0830185611dd6565b6124df60e0830184611d55565b9998505050505050505050565b6000602082019050818103600083015261250581611ebe565b9050919050565b6000602082019050818103600083015261252581611f27565b9050919050565b6000602082019050818103600083015261254581611f4a565b9050919050565b6000602082019050818103600083015261256581611f90565b9050919050565b6000602082019050818103600083015261258581611ff9565b9050919050565b600060208201905081810360008301526125a58161201c565b9050919050565b600060208201905081810360008301526125c581612062565b9050919050565b600060208201905081810360008301526125e5816120cb565b9050919050565b60006020820190508181036000830152612605816120ee565b9050919050565b6000602082019050818103600083015261262581612134565b9050919050565b6000602082019050818103600083015261264581612157565b9050919050565b6000808335600160200384360303811261266557600080fd5b80840192508235915067ffffffffffffffff82111561268357600080fd5b60208301925060018202360383131561269b57600080fd5b509250929050565b60006126ad6126be565b90506126b98282612b20565b919050565b6000604051905090565b600067ffffffffffffffff8211156126e3576126e2612c27565b5b6126ec82612c56565b9050602081019050919050565b600081519050919050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061273682612ab7565b915061274183612ab7565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561277657612775612bf8565b5b828201905092915050565b600061278c82612ad1565b915061279783612ad1565b92508260ff038211156127ad576127ac612bf8565b5b828201905092915050565b6000808291508390505b6001851115612802578086048111156127de576127dd612bf8565b5b60018516156127ed5780820291505b80810290506127fb85612c81565b94506127c2565b94509492505050565b600061281682612ab7565b915061282183612ab7565b925061284e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484612856565b905092915050565b6000826128665760019050612922565b816128745760009050612922565b816001811461288a5760028114612894576128c3565b6001915050612922565b60ff8411156128a6576128a5612bf8565b5b8360020a9150848211156128bd576128bc612bf8565b5b50612922565b5060208310610133831016604e8410600b84101617156128f85782820a9050838111156128f3576128f2612bf8565b5b612922565b61290584848460016127b8565b9250905081840481111561291c5761291b612bf8565b5b81810290505b9392505050565b600061293482612ab7565b915061293f83612ab7565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561297857612977612bf8565b5b828202905092915050565b600061298e82612ab7565b915061299983612ab7565b9250828210156129ac576129ab612bf8565b5b828203905092915050565b60006129c282612ad1565b91506129cd83612ad1565b9250828210156129e0576129df612bf8565b5b828203905092915050565b60006129f682612a97565b9050919050565b60008115159050919050565b60007fffffffffffffffffffffffffffffffffffffffff00000000000000000000000082169050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60007fffffffffffffffff00000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b83811015612b0b578082015181840152602081019050612af0565b83811115612b1a576000848401525b50505050565b612b2982612c56565b810181811067ffffffffffffffff82111715612b4857612b47612c27565b5b80604052505050565b6000612b5c82612ab7565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612b8f57612b8e612bf8565b5b600182019050919050565b6000612ba582612bd4565b9050919050565b6000819050919050565b6000819050919050565b6000819050919050565b6000819050919050565b6000612bdf82612c74565b9050919050565b6000612bf182612c67565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160f81b9050919050565b60008160601b9050919050565b60008160011c9050919050565b7f6300000000000000000000000000000000000000000000000000000000000000600082015250565b7f6700000000000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f8800000000000000000000000000000000000000000000000000000000000000600082015250565b7f7500000000000000000000000000000000000000000000000000000000000000600082015250565b7f52656164206f76657272756e20647572696e6720566172496e7420706172736960008201527f6e67000000000000000000000000000000000000000000000000000000000000602082015250565b7f42616420566172496e7420696e207363726970745075626b6579000000000000600082015250565b7f1400000000000000000000000000000000000000000000000000000000000000600082015250565b7f5661756c74206973206e6f742074727573746564000000000000000000000000600082015250565b7fa900000000000000000000000000000000000000000000000000000000000000600082015250565b7fb100000000000000000000000000000000000000000000000000000000000000600082015250565b7f57726f6e672033322d6279746520736372697074206861736800000000000000600082015250565b7f57726f6e67207363726970742068617368206c656e6774680000000000000000600082015250565b7f8700000000000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f7600000000000000000000000000000000000000000000000000000000000000600082015250565b7f6800000000000000000000000000000000000000000000000000000000000000600082015250565b7f4465706f73697420616c72656164792072657665616c65640000000000000000600082015250565b7f57726f6e672032302d6279746520736372697074206861736800000000000000600082015250565b7f0800000000000000000000000000000000000000000000000000000000000000600082015250565b7f566f75742072656164206f76657272756e000000000000000000000000000000600082015250565b7f536c696365206f7574206f6620626f756e647300000000000000000000000000600082015250565b7f0400000000000000000000000000000000000000000000000000000000000000600082015250565b7fac00000000000000000000000000000000000000000000000000000000000000600082015250565b6130bb816129eb565b81146130c657600080fd5b50565b6130d2816129fd565b81146130dd57600080fd5b50565b6130e981612a09565b81146130f457600080fd5b50565b61310081612a35565b811461310b57600080fd5b50565b61311781612a3f565b811461312257600080fd5b50565b61312e81612a6b565b811461313957600080fd5b50565b61314581612ab7565b811461315057600080fd5b50565b61315c81612ad1565b811461316757600080fd5b5056fea2646970667358221220295f3b4ea195fd7fba9f5296085182facf835e59f603d9d4791d500bcbfc014564736f6c63430008040033",
332
+ "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100885760003560e01c80638d658d4e1161005b5780638d658d4e146101025780638da5cb5b1461011e578063e53c0b551461013c578063f2fde38b1461016c57610088565b806325750db71461008d57806343c6de29146100a957806360d712fc146100dc578063715018a6146100f8575b600080fd5b6100a760048036038101906100a29190611cae565b610188565b005b6100c360048036038101906100be9190611d03565b610772565b6040516100d3949392919061240e565b60405180910390f35b6100f660048036038101906100f19190611b23565b6107ff565b005b610100610924565b005b61011c60048036038101906101179190611c03565b6109ac565b005b6101266109b2565b60405161013391906123f3565b60405180910390f35b61015660048036038101906101519190611afa565b6109db565b6040516101639190612453565b60405180910390f35b61018660048036038101906101819190611afa565b6109fb565b005b600073ffffffffffffffffffffffffffffffffffffffff168160c00160208101906101b39190611afa565b73ffffffffffffffffffffffffffffffffffffffff1614806102305750600160008260c00160208101906101e79190611afa565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61026f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102669061254c565b60405180910390fd5b60008160200160208101906102849190611afa565b8260400160208101906102979190611bda565b8360600160208101906102aa9190611b5f565b8460800160208101906102bd9190611b5f565b8560a00160208101906102d09190611bb1565b6040516020016102e49594939291906122b8565b6040516020818303038152906040529050600061037183600001602081019061030d9190611d2c565b60ff16858060400190610320919061264c565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050610af390919063ffffffff16565b9050600061037e82610d33565b90506014815114156103e757610393836110d5565b805190602001208180519060200120146103e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103d9906125ec565b60405180910390fd5b610484565b602081511415610448576103fa836111a2565b61040382611268565b14610443576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161043a9061256c565b60405180910390fd5b610483565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161047a9061258c565b60405180910390fd5b5b60006104f886600001602081019061049c9190611bb1565b8780602001906104ac919061264c565b8980604001906104bc919061264c565b8b60600160208101906104cf9190611bb1565b6040516020016104e496959493929190612257565b6040516020818303038152906040526111a2565b9050600060026000838860000160208101906105149190611d2c565b60405160200161052592919061222b565b6040516020818303038152906040528051906020012060001c81526020019081526020016000209050600081600001601c9054906101000a900463ffffffff1663ffffffff16146105ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105a2906125cc565b60405180910390fd5b600060208501519050808260000160146101000a81548167ffffffffffffffff021916908360c01c02179055508660200160208101906105eb9190611afa565b8260000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055504282600001601c6101000a81548163ffffffff021916908363ffffffff1602179055508660c00160208101906106639190611afa565b8260010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f293519c6fe266b8b9ca154d153e408c6ef03135a5abeb42e9a91781d620ca47b838860000160208101906106da9190611d2c565b8960200160208101906106ed9190611afa565b8a60400160208101906107009190611bda565b8b60600160208101906107139190611b5f565b8c60800160208101906107269190611b5f565b8d60a00160208101906107399190611bb1565b8e60c001602081019061074c9190611afa565b60405161076098979695949392919061246e565b60405180910390a15050505050505050565b60026020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060000160149054906101000a900460c01b9080600001601c9054906101000a900463ffffffff16908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905084565b61080761128b565b73ffffffffffffffffffffffffffffffffffffffff166108256109b2565b73ffffffffffffffffffffffffffffffffffffffff161461087b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610872906125ac565b60405180910390fd5b80600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9065599c12c4294d9e2201638226d0d0beb95c228f468c4e7c2bdb8322b6066f826040516109189190612453565b60405180910390a25050565b61092c61128b565b73ffffffffffffffffffffffffffffffffffffffff1661094a6109b2565b73ffffffffffffffffffffffffffffffffffffffff16146109a0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610997906125ac565b60405180910390fd5b6109aa6000611293565b565b50505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60016020528060005260406000206000915054906101000a900460ff1681565b610a0361128b565b73ffffffffffffffffffffffffffffffffffffffff16610a216109b2565b73ffffffffffffffffffffffffffffffffffffffff1614610a77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6e906125ac565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610ae7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ade906124ec565b60405180910390fd5b610af081611293565b50565b6060600080610b0185611357565b80925081935050507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415610b6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b639061250c565b60405180910390fd5b808410610bae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba59061260c565b60405180910390fd5b6060600080846001610bc0919061272b565b905060005b87811015610c7f57610bee82838b51610bde9190612983565b8b6114539092919063ffffffff16565b9350610bf984611519565b92507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831415610c5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c559061252c565b60405180910390fd5b8282610c6a919061272b565b91508080610c7790612b51565b915050610bc5565b50610ca181828a51610c919190612983565b8a6114539092919063ffffffff16565b9250610cac83611519565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415610d11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d089061252c565b60405180910390fd5b610d2681838a6114539092919063ffffffff16565b9550505050505092915050565b6060600082600881518110610d71577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b60f81c90508251600982610d909190612781565b60ff1614610db057604051806020016040528060008152509150506110d0565b600083600981518110610dec577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b60f81c60ff161415610edf5760028160ff161015610e2757604051806020016040528060008152509150506110d0565b600083600a81518110610e63577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b60f81c60ff169050600282610e8391906129b7565b60ff1681141580610ea2575060208114158015610ea1575060148114155b5b15610ec05760405180602001604052806000815250925050506110d0565b610ed6600b82866114539092919063ffffffff16565b925050506110d0565b6000610ef860086003866115fd9092919063ffffffff16565b90507fe1683aec1a10d43657f3f2c82e683d8e19e8a3f320ce9d3bf22c6ca6ab4cbce6811415610ffc57601484600b81518110610f5e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b60f81c60ff16141580610fbe57507f3b50b2715f5a28d2a7eeb517f17ec797e8536bd425bf31fc4f6bf7ce1e34b77d610fbb60028651610fa99190612983565b6002876115fd9092919063ffffffff16565b14155b15610fdc5760405180602001604052806000815250925050506110d0565b610ff3600c6014866114539092919063ffffffff16565b925050506110d0565b7fa0916ee0b243ee20fb4ce56170744d86b54d7ae03a418a7a12156f40dedcf7d78114156110bb57608784600186516110359190612983565b8151811061106c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b60f81c60ff161461109b5760405180602001604052806000815250925050506110d0565b6110b2600b6014866114539092919063ffffffff16565b925050506110d0565b50604051806020016040528060008152509150505b919050565b606060036002836040516110e991906122a1565b602060405180830381855afa158015611106573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906111299190611b88565b6040516020016111399190612210565b60405160208183030381529060405260405161115591906122a1565b602060405180830381855afa158015611172573d6000803e3d6000fd5b5050506040515160601b60405160200161118c91906121f5565b6040516020818303038152906040529050919050565b6000600280836040516111b591906122a1565b602060405180830381855afa1580156111d2573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906111f59190611b88565b6040516020016112059190612210565b60405160208183030381529060405260405161122191906122a1565b602060405180830381855afa15801561123e573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906112619190611b88565b9050919050565b6000808251141561127e576000801b9050611286565b602082015190505b919050565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008060006113658461166f565b905060008160ff1614156113cd576000846000815181106113af577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b60f81c8060ff169050925092505061144e565b8060016113da9190612781565b60ff1684511015611412577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6000925092505061144e565b600061143d61143861143360018560ff16896114539092919063ffffffff16565b61178f565b6118f6565b905081818160ff1691509350935050505b915091565b6060600082141561147557604051806020016040528060008152509050611512565b60008284611483919061272b565b90508381118015611495575080855110155b6114d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114cb9061262c565b60405180910390fd5b604051915082604083010160405282825283850182038460208701018481015b8082101561150d578151838301526020820191506114f4565b505050505b9392505050565b600060098251101561154d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90506115f8565b600061157160088085516115619190612983565b856114539092919063ffffffff16565b905060008061157f83611357565b80925081935050507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156115da577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff93505050506115f8565b808260096115e8919061272b565b6115f2919061272b565b93505050505b919050565b600080828461160c919061272b565b9050838111801561161e575080855110155b61165d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116549061262c565b60405180910390fd5b82846020870101209150509392505050565b600060ff826000815181106116ad577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b60f81c60ff1614156116cd576008905061178a565b60fe82600081518110611709577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b60f81c60ff161415611729576004905061178a565b60fd82600081518110611765577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b60f81c60ff161415611785576002905061178a565b600090505b919050565b60606000825167ffffffffffffffff8111156117d4577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156118065781602001600182028036833780820191505090505b50905060005b83518110156118ec5783818151811061184e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b8260018387516118699190612983565b6118739190612983565b815181106118aa577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535080806118e490612b51565b91505061180c565b5080915050919050565b60008060005b83518110156119aa57600181611912919061272b565b845161191e9190612983565b600861192a9190612929565b6002611936919061280b565b84828151811061196f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b60f81c60ff1661198a9190612929565b82611995919061272b565b915080806119a290612b51565b9150506118fc565b5080915050919050565b60006119c76119c2846126c8565b6126a3565b9050828152602081018484840111156119df57600080fd5b6119ea848285612ade565b509392505050565b600081359050611a01816130b2565b92915050565b600081359050611a16816130c9565b92915050565b600081359050611a2b816130e0565b92915050565b600081519050611a40816130f7565b92915050565b600081359050611a558161310e565b92915050565b600081359050611a6a81613125565b92915050565b600082601f830112611a8157600080fd5b8135611a918482602086016119b4565b91505092915050565b600060808284031215611aac57600080fd5b81905092915050565b600060e08284031215611ac757600080fd5b81905092915050565b600081359050611adf8161313c565b92915050565b600081359050611af481613153565b92915050565b600060208284031215611b0c57600080fd5b6000611b1a848285016119f2565b91505092915050565b60008060408385031215611b3657600080fd5b6000611b44858286016119f2565b9250506020611b5585828601611a07565b9150509250929050565b600060208284031215611b7157600080fd5b6000611b7f84828501611a1c565b91505092915050565b600060208284031215611b9a57600080fd5b6000611ba884828501611a31565b91505092915050565b600060208284031215611bc357600080fd5b6000611bd184828501611a46565b91505092915050565b600060208284031215611bec57600080fd5b6000611bfa84828501611a5b565b91505092915050565b60008060008060808587031215611c1957600080fd5b600085013567ffffffffffffffff811115611c3357600080fd5b611c3f87828801611a9a565b945050602085013567ffffffffffffffff811115611c5c57600080fd5b611c6887828801611a70565b9350506040611c7987828801611ad0565b925050606085013567ffffffffffffffff811115611c9657600080fd5b611ca287828801611a70565b91505092959194509250565b6000806101008385031215611cc257600080fd5b600083013567ffffffffffffffff811115611cdc57600080fd5b611ce885828601611a9a565b9250506020611cf985828601611ab5565b9150509250929050565b600060208284031215611d1557600080fd5b6000611d2384828501611ad0565b91505092915050565b600060208284031215611d3e57600080fd5b6000611d4c84828501611ae5565b91505092915050565b611d5e816129eb565b82525050565b611d75611d70826129eb565b612b9a565b82525050565b611d84816129fd565b82525050565b611d9381612a09565b82525050565b611daa611da582612a09565b612bac565b82525050565b611db981612a35565b82525050565b611dd0611dcb82612a35565b612bb6565b82525050565b611ddf81612a3f565b82525050565b611df6611df182612a3f565b612bc0565b82525050565b611e0581612a6b565b82525050565b611e1c611e1782612a6b565b612bca565b82525050565b6000611e2e8385612704565b9350611e3b838584612ade565b82840190509392505050565b6000611e52826126f9565b611e5c8185612704565b9350611e6c818560208601612aed565b80840191505092915050565b6000611e85600183612720565b9150611e9082612c8e565b600182019050919050565b6000611ea8600183612720565b9150611eb382612cb7565b600182019050919050565b6000611ecb60268361270f565b9150611ed682612ce0565b604082019050919050565b6000611eee600183612720565b9150611ef982612d2f565b600182019050919050565b6000611f11600183612720565b9150611f1c82612d58565b600182019050919050565b6000611f3460228361270f565b9150611f3f82612d81565b604082019050919050565b6000611f57601a8361270f565b9150611f6282612dd0565b602082019050919050565b6000611f7a600183612720565b9150611f8582612df9565b600182019050919050565b6000611f9d60148361270f565b9150611fa882612e22565b602082019050919050565b6000611fc0600183612720565b9150611fcb82612e4b565b600182019050919050565b6000611fe3600183612720565b9150611fee82612e74565b600182019050919050565b600061200660198361270f565b915061201182612e9d565b602082019050919050565b600061202960188361270f565b915061203482612ec6565b602082019050919050565b600061204c600183612720565b915061205782612eef565b600182019050919050565b600061206f60208361270f565b915061207a82612f18565b602082019050919050565b6000612092600183612720565b915061209d82612f41565b600182019050919050565b60006120b5600183612720565b91506120c082612f6a565b600182019050919050565b60006120d860188361270f565b91506120e382612f93565b602082019050919050565b60006120fb60198361270f565b915061210682612fbc565b602082019050919050565b600061211e600183612720565b915061212982612fe5565b600182019050919050565b600061214160118361270f565b915061214c8261300e565b602082019050919050565b600061216460138361270f565b915061216f82613037565b602082019050919050565b6000612187600183612720565b915061219282613060565b600182019050919050565b60006121aa600183612720565b91506121b582613089565b600182019050919050565b6121c981612ac1565b82525050565b6121d881612ad1565b82525050565b6121ef6121ea82612ad1565b612be6565b82525050565b60006122018284611d99565b60148201915081905092915050565b600061221c8284611dbf565b60208201915081905092915050565b60006122378285611dbf565b60208201915061224782846121de565b6001820191508190509392505050565b60006122638289611de5565b600482019150612274828789611e22565b9150612281828587611e22565b915061228d8284611de5565b600482019150819050979650505050505050565b60006122ad8284611e47565b915081905092915050565b60006122c382611f6d565b91506122cf8288611d64565b6014820191506122de82611f04565b91506122e982612111565b91506122f58287611e0b565b60088201915061230482611f04565b915061230f82612085565b915061231a82611fb3565b915061232582611f6d565b91506123318286611d99565b6014820191506123408261203f565b915061234b82611e78565b91506123568261219d565b915061236182611e9b565b915061236c82612085565b915061237782611fb3565b915061238282611f6d565b915061238e8285611d99565b60148201915061239d82611ee1565b91506123a88261217a565b91506123b48284611de5565b6004820191506123c382611fd6565b91506123ce82611f04565b91506123d98261219d565b91506123e4826120a8565b91508190509695505050505050565b60006020820190506124086000830184611d55565b92915050565b60006080820190506124236000830187611d55565b6124306020830186611dfc565b61243d60408301856121c0565b61244a6060830184611d55565b95945050505050565b60006020820190506124686000830184611d7b565b92915050565b600061010082019050612484600083018b611db0565b612491602083018a6121cf565b61249e6040830189611d55565b6124ab6060830188611dfc565b6124b86080830187611d8a565b6124c560a0830186611d8a565b6124d260c0830185611dd6565b6124df60e0830184611d55565b9998505050505050505050565b6000602082019050818103600083015261250581611ebe565b9050919050565b6000602082019050818103600083015261252581611f27565b9050919050565b6000602082019050818103600083015261254581611f4a565b9050919050565b6000602082019050818103600083015261256581611f90565b9050919050565b6000602082019050818103600083015261258581611ff9565b9050919050565b600060208201905081810360008301526125a58161201c565b9050919050565b600060208201905081810360008301526125c581612062565b9050919050565b600060208201905081810360008301526125e5816120cb565b9050919050565b60006020820190508181036000830152612605816120ee565b9050919050565b6000602082019050818103600083015261262581612134565b9050919050565b6000602082019050818103600083015261264581612157565b9050919050565b6000808335600160200384360303811261266557600080fd5b80840192508235915067ffffffffffffffff82111561268357600080fd5b60208301925060018202360383131561269b57600080fd5b509250929050565b60006126ad6126be565b90506126b98282612b20565b919050565b6000604051905090565b600067ffffffffffffffff8211156126e3576126e2612c27565b5b6126ec82612c56565b9050602081019050919050565b600081519050919050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061273682612ab7565b915061274183612ab7565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561277657612775612bf8565b5b828201905092915050565b600061278c82612ad1565b915061279783612ad1565b92508260ff038211156127ad576127ac612bf8565b5b828201905092915050565b6000808291508390505b6001851115612802578086048111156127de576127dd612bf8565b5b60018516156127ed5780820291505b80810290506127fb85612c81565b94506127c2565b94509492505050565b600061281682612ab7565b915061282183612ab7565b925061284e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484612856565b905092915050565b6000826128665760019050612922565b816128745760009050612922565b816001811461288a5760028114612894576128c3565b6001915050612922565b60ff8411156128a6576128a5612bf8565b5b8360020a9150848211156128bd576128bc612bf8565b5b50612922565b5060208310610133831016604e8410600b84101617156128f85782820a9050838111156128f3576128f2612bf8565b5b612922565b61290584848460016127b8565b9250905081840481111561291c5761291b612bf8565b5b81810290505b9392505050565b600061293482612ab7565b915061293f83612ab7565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561297857612977612bf8565b5b828202905092915050565b600061298e82612ab7565b915061299983612ab7565b9250828210156129ac576129ab612bf8565b5b828203905092915050565b60006129c282612ad1565b91506129cd83612ad1565b9250828210156129e0576129df612bf8565b5b828203905092915050565b60006129f682612a97565b9050919050565b60008115159050919050565b60007fffffffffffffffffffffffffffffffffffffffff00000000000000000000000082169050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60007fffffffffffffffff00000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b83811015612b0b578082015181840152602081019050612af0565b83811115612b1a576000848401525b50505050565b612b2982612c56565b810181811067ffffffffffffffff82111715612b4857612b47612c27565b5b80604052505050565b6000612b5c82612ab7565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612b8f57612b8e612bf8565b5b600182019050919050565b6000612ba582612bd4565b9050919050565b6000819050919050565b6000819050919050565b6000819050919050565b6000819050919050565b6000612bdf82612c74565b9050919050565b6000612bf182612c67565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160f81b9050919050565b60008160601b9050919050565b60008160011c9050919050565b7f6300000000000000000000000000000000000000000000000000000000000000600082015250565b7f6700000000000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f8800000000000000000000000000000000000000000000000000000000000000600082015250565b7f7500000000000000000000000000000000000000000000000000000000000000600082015250565b7f52656164206f76657272756e20647572696e6720566172496e7420706172736960008201527f6e67000000000000000000000000000000000000000000000000000000000000602082015250565b7f42616420566172496e7420696e207363726970745075626b6579000000000000600082015250565b7f1400000000000000000000000000000000000000000000000000000000000000600082015250565b7f5661756c74206973206e6f742074727573746564000000000000000000000000600082015250565b7fa900000000000000000000000000000000000000000000000000000000000000600082015250565b7fb100000000000000000000000000000000000000000000000000000000000000600082015250565b7f57726f6e672033322d6279746520736372697074206861736800000000000000600082015250565b7f57726f6e67207363726970742068617368206c656e6774680000000000000000600082015250565b7f8700000000000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f7600000000000000000000000000000000000000000000000000000000000000600082015250565b7f6800000000000000000000000000000000000000000000000000000000000000600082015250565b7f4465706f73697420616c72656164792072657665616c65640000000000000000600082015250565b7f57726f6e672032302d6279746520736372697074206861736800000000000000600082015250565b7f0800000000000000000000000000000000000000000000000000000000000000600082015250565b7f566f75742072656164206f76657272756e000000000000000000000000000000600082015250565b7f536c696365206f7574206f6620626f756e647300000000000000000000000000600082015250565b7f0400000000000000000000000000000000000000000000000000000000000000600082015250565b7fac00000000000000000000000000000000000000000000000000000000000000600082015250565b6130bb816129eb565b81146130c657600080fd5b50565b6130d2816129fd565b81146130dd57600080fd5b50565b6130e981612a09565b81146130f457600080fd5b50565b61310081612a35565b811461310b57600080fd5b50565b61311781612a3f565b811461312257600080fd5b50565b61312e81612a6b565b811461313957600080fd5b50565b61314581612ab7565b811461315057600080fd5b50565b61315c81612ad1565b811461316757600080fd5b5056fea2646970667358221220295f3b4ea195fd7fba9f5296085182facf835e59f603d9d4791d500bcbfc014564736f6c63430008040033",
219
333
  "linkReferences": {},
220
334
  "deployedLinkReferences": {}
221
335
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/dbfbea2113f92b28fea5d74ebe0abd4d.json"
3
+ "buildInfo": "../../../build-info/6fd49a5e373c5d7782165e5d5363063e.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/dbfbea2113f92b28fea5d74ebe0abd4d.json"
3
+ "buildInfo": "../../../build-info/6fd49a5e373c5d7782165e5d5363063e.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/dbfbea2113f92b28fea5d74ebe0abd4d.json"
3
+ "buildInfo": "../../../build-info/6fd49a5e373c5d7782165e5d5363063e.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/dbfbea2113f92b28fea5d74ebe0abd4d.json"
3
+ "buildInfo": "../../../build-info/6fd49a5e373c5d7782165e5d5363063e.json"
4
4
  }
@@ -15,11 +15,13 @@
15
15
 
16
16
  pragma solidity 0.8.4;
17
17
 
18
- import "./BitcoinTx.sol";
18
+ import "@openzeppelin/contracts/access/Ownable.sol";
19
19
 
20
20
  import {BTCUtils} from "@keep-network/bitcoin-spv-sol/contracts/BTCUtils.sol";
21
21
  import {BytesLib} from "@keep-network/bitcoin-spv-sol/contracts/BytesLib.sol";
22
22
 
23
+ import "./BitcoinTx.sol";
24
+
23
25
  /// @title Bitcoin Bridge
24
26
  /// @notice Bridge manages BTC deposit and redemption flow and is increasing and
25
27
  /// decreasing balances in the Bank as a result of BTC deposit and
@@ -39,7 +41,7 @@ import {BytesLib} from "@keep-network/bitcoin-spv-sol/contracts/BytesLib.sol";
39
41
  /// wallet informs the Bridge about the sweep increasing appropriate
40
42
  /// balances in the Bank.
41
43
  /// @dev Bridge is an upgradeable component of the Bank.
42
- contract Bridge {
44
+ contract Bridge is Ownable {
43
45
  using BTCUtils for bytes;
44
46
  using BytesLib for bytes;
45
47
 
@@ -66,7 +68,8 @@ contract Bridge {
66
68
  // and used with OP_CHECKLOCKTIMEVERIFY opcode as described in:
67
69
  // https://github.com/bitcoin/bips/blob/master/bip-0065.mediawiki
68
70
  bytes4 refundLocktime;
69
- // Address of the tBTC vault.
71
+ // Address of the Bank vault to which the deposit is routed to.
72
+ // Optional, can be 0x0. The vault must be trusted by the Bridge.
70
73
  address vault;
71
74
  }
72
75
 
@@ -79,10 +82,20 @@ contract Bridge {
79
82
  bytes8 amount;
80
83
  // UNIX timestamp the deposit was revealed at.
81
84
  uint32 revealedAt;
82
- // Address of the tBTC vault.
85
+ // Address of the Bank vault the deposit is routed to.
86
+ // Optional, can be 0x0.
83
87
  address vault;
84
88
  }
85
89
 
90
+ /// @notice Indicates if the vault with the given address is trusted or not.
91
+ /// Depositors can route their revealed deposits only to trusted
92
+ /// vaults and have trusted vaults notified about new deposits as
93
+ /// soon as these deposits get swept. Vaults not trusted by the
94
+ /// Bridge can still be used by Bank balance owners on their own
95
+ /// responsibility - anyone can approve their Bank balance to any
96
+ /// address.
97
+ mapping(address => bool) public isVaultTrusted;
98
+
86
99
  /// @notice Collection of all unswept deposits indexed by
87
100
  /// keccak256(fundingTxHash | fundingOutputIndex).
88
101
  /// The fundingTxHash is LE bytes32 and fundingOutputIndex an uint8.
@@ -100,9 +113,29 @@ contract Bridge {
100
113
  bytes8 blindingFactor,
101
114
  bytes20 walletPubKeyHash,
102
115
  bytes20 refundPubKeyHash,
103
- bytes4 refundLocktime
116
+ bytes4 refundLocktime,
117
+ address vault
104
118
  );
105
119
 
120
+ event VaultStatusUpdated(address indexed vault, bool isTrusted);
121
+
122
+ /// @notice Allows the Governance to mark the given vault address as trusted
123
+ /// or no longer trusted. Vaults are not trusted by default.
124
+ /// Trusted vault must meet the following criteria:
125
+ /// - `IVault.onBalanceIncreased` must have a known, low gas cost.
126
+ /// - `IVault.onBalanceIncreased` must never revert.
127
+ /// @dev Without restricting reveal only to trusted vaults, malicious
128
+ /// vaults not meeting the criteria would be able to nuke sweep proof
129
+ /// transactions executed by ECDSA wallet with deposits routed to
130
+ /// them.
131
+ /// @param vault The address of the vault
132
+ /// @param isTrusted flag indicating whether the vault is trusted or not
133
+ /// @dev Can only be called by the Governance.
134
+ function setVaultStatus(address vault, bool isTrusted) external onlyOwner {
135
+ isVaultTrusted[vault] = isTrusted;
136
+ emit VaultStatusUpdated(vault, isTrusted);
137
+ }
138
+
106
139
  /// @notice Used by the depositor to reveal information about their P2(W)SH
107
140
  /// Bitcoin deposit to the Bridge on Ethereum chain. The off-chain
108
141
  /// wallet listens for revealed deposit events and may decide to
@@ -111,10 +144,13 @@ contract Bridge {
111
144
  /// after the Bitcoin transaction with P2(W)SH deposit is mined on
112
145
  /// the Bitcoin chain. Worth noting, the gas cost of this function
113
146
  /// scales with the number of P2(W)SH transaction inputs and
114
- /// outputs.
147
+ /// outputs. The deposit may be routed to one of the trusted vaults.
148
+ /// When a deposit is routed to a vault, vault gets notified when
149
+ /// the deposit gets swept and it may execute the appropriate action.
115
150
  /// @param fundingTx Bitcoin funding transaction data, see `BitcoinTx.Info`
116
151
  /// @param reveal Deposit reveal data, see `RevealInfo struct
117
152
  /// @dev Requirements:
153
+ /// - `reveal.vault` must be 0x0 or point to a trusted vault
118
154
  /// - `reveal.fundingOutputIndex` must point to the actual P2(W)SH
119
155
  /// output of the BTC deposit transaction
120
156
  /// - `reveal.depositor` must be the Ethereum address used in the
@@ -137,6 +173,11 @@ contract Bridge {
137
173
  BitcoinTx.Info calldata fundingTx,
138
174
  RevealInfo calldata reveal
139
175
  ) external {
176
+ require(
177
+ reveal.vault == address(0) || isVaultTrusted[reveal.vault],
178
+ "Vault is not trusted"
179
+ );
180
+
140
181
  bytes memory expectedScript =
141
182
  abi.encodePacked(
142
183
  hex"14", // Byte length of depositor Ethereum address.
@@ -248,7 +289,8 @@ contract Bridge {
248
289
  reveal.blindingFactor,
249
290
  reveal.walletPubKeyHash,
250
291
  reveal.refundPubKeyHash,
251
- reveal.refundLocktime
292
+ reveal.refundLocktime,
293
+ reveal.vault
252
294
  );
253
295
  }
254
296
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@keep-network/tbtc-v2",
3
- "version": "0.1.1-dev.7+main.c19a34932c98be7f99633a95a50b6764f2c12e89",
3
+ "version": "0.1.1-dev.8+main.7fdc8064a9b94c95f2e26300aa867e23cf21708e",
4
4
  "license": "MIT",
5
5
  "files": [
6
6
  "artifacts/",