diff --git a/ProjectPlugins/CodexContractsPlugin/CodexContractsAccess.cs b/ProjectPlugins/CodexContractsPlugin/CodexContractsAccess.cs index 40ee264e..ef8d2003 100644 --- a/ProjectPlugins/CodexContractsPlugin/CodexContractsAccess.cs +++ b/ProjectPlugins/CodexContractsPlugin/CodexContractsAccess.cs @@ -146,7 +146,6 @@ namespace CodexContractsPlugin public void WaitUntilNextPeriod() { - log.Log("Waiting until next proof period..."); var now = DateTimeOffset.UtcNow.ToUnixTimeSeconds(); var periodSeconds = (int)Deployment.Config.Proofs.Period; var secondsLeft = now % periodSeconds; diff --git a/ProjectPlugins/CodexContractsPlugin/Marketplace/Marketplace.cs b/ProjectPlugins/CodexContractsPlugin/Marketplace/Marketplace.cs index dba71566..2f2c8ede 100644 --- a/ProjectPlugins/CodexContractsPlugin/Marketplace/Marketplace.cs +++ b/ProjectPlugins/CodexContractsPlugin/Marketplace/Marketplace.cs @@ -15,7 +15,7 @@ namespace CodexContractsPlugin.Marketplace public class MarketplaceDeploymentBase : ContractDeploymentMessage { - public static string BYTECODE = "0x60c060405234801561001057600080fd5b50604051614f41380380614f4183398101604081905261002f9161053b565b602083015180516040850151516001805460ff191660ff90921691909117905582906001600160401b03811660000361007b5760405163015536c760e51b815260040160405180910390fd5b6001600160401b031660805261010043116100a9576040516338f5f66160e11b815260040160405180910390fd5b8151600280546020850151604086015160608701516001600160401b039586166001600160801b0319909416939093176801000000000000000095909216949094021761ffff60801b1916600160801b60ff9485160260ff60881b191617600160881b9390911692909202919091178155608083015183919060039061012f90826106d9565b5050600480546001600160a01b0319166001600160a01b0393841617905550831660a05250825151606460ff909116111561017d576040516302bd816360e41b815260040160405180910390fd5b606483600001516040015160ff1611156101aa576040516354e5e0ab60e11b815260040160405180910390fd5b825160408101516020909101516064916101c391610797565b60ff1611156101e5576040516317ff9d0f60e21b815260040160405180910390fd5b82518051600b805460208085015160408087015160609788015160ff90811663010000000263ff0000001992821662010000029290921663ffff0000199482166101000261ffff1990971698821698909817959095179290921695909517178355808801518051600c80549383015196830151978301518516600160881b0260ff60881b1998909516600160801b029790971661ffff60801b196001600160401b0397881668010000000000000000026001600160801b031990951697909216969096179290921791909116939093171783556080820151869391929190600d906102d090826106d9565b50505060408201515160038201805460ff191660ff909216919091179055606090910151600490910180546001600160401b0319166001600160401b03909216919091179055506107c8915050565b634e487b7160e01b600052604160045260246000fd5b60405160a081016001600160401b03811182821017156103575761035761031f565b60405290565b604051608081016001600160401b03811182821017156103575761035761031f565b604051601f8201601f191681016001600160401b03811182821017156103a7576103a761031f565b604052919050565b805160ff811681146103c057600080fd5b919050565b80516001600160401b03811681146103c057600080fd5b600060a082840312156103ee57600080fd5b6103f6610335565b9050610401826103c5565b815261040f602083016103c5565b6020820152610420604083016103af565b6040820152610431606083016103af565b606082015260808201516001600160401b0381111561044f57600080fd5b8201601f8101841361046057600080fd5b80516001600160401b038111156104795761047961031f565b61048c601f8201601f191660200161037f565b8181528560208385010111156104a157600080fd5b60005b828110156104c0576020818501810151838301820152016104a4565b5060006020838301015280608085015250505092915050565b6000602082840312156104eb57600080fd5b604051602081016001600160401b038111828210171561050d5761050d61031f565b60405290508061051c836103af565b905292915050565b80516001600160a01b03811681146103c057600080fd5b60008060006060848603121561055057600080fd5b83516001600160401b0381111561056657600080fd5b840180860360e081121561057957600080fd5b61058161035d565b608082121561058f57600080fd5b61059761035d565b91506105a2836103af565b82526105b0602084016103af565b60208301526105c1604084016103af565b60408301526105d2606084016103af565b60608301529081526080820151906001600160401b038211156105f457600080fd5b610600888385016103dc565b60208201526106128860a085016104d9565b604082015261062360c084016103c5565b6060820152945061063991505060208501610524565b915061064760408501610524565b90509250925092565b600181811c9082168061066457607f821691505b60208210810361068457634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156106d457806000526020600020601f840160051c810160208510156106b15750805b601f840160051c820191505b818110156106d157600081556001016106bd565b50505b505050565b81516001600160401b038111156106f2576106f261031f565b610706816107008454610650565b8461068a565b6020601f82116001811461073a57600083156107225750848201515b600019600385901b1c1916600184901b1784556106d1565b600084815260208120601f198516915b8281101561076a578785015182556020948501946001909201910161074a565b50848210156107885786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b60ff81811683821602908116908181146107c157634e487b7160e01b600052601160045260246000fd5b5092915050565b60805160a05161471c610825600039600081816104bf01528181610f700152818161201901528181612603015281816126b301528181612842015281816128f20152612d1401526000818161355d015261384f015261471c6000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c80636e2b54ee116100f9578063c0cc4add11610097578063e8aa0a0711610071578063e8aa0a0714610461578063f752196b14610474578063fb1e61ca1461049d578063fc0c546a146104bd57600080fd5b8063c0cc4add14610428578063c5d433511461043b578063d02bbe331461044e57600080fd5b8063a29c29a4116100d3578063a29c29a4146103b2578063a3a0807e146103c5578063b396dc79146103e8578063be5cdc481461040857600080fd5b80636e2b54ee146103845780639777b72c1461039757806399b6da0c1461039f57600080fd5b8063329b5a0b1161016657806351a766421161014057806351a76642146103035780635da73835146103165780636b00c8cf1461032b5780636c70bee91461036f57600080fd5b8063329b5a0b14610298578063458d2bf1146102cb5780634641dce6146102de57600080fd5b806312827602116101a2578063128276021461022e5780631d873c1b14610241578063237d84821461025457806326d6f8341461026757600080fd5b806302fa8e65146101c957806305b90773146101f95780630aefaabe14610219575b600080fd5b6101dc6101d73660046138ea565b6104e3565b6040516001600160401b0390911681526020015b60405180910390f35b61020c6102073660046138ea565b6105c1565b6040516101f09190613919565b61022c610227366004613948565b6106e4565b005b61022c61023c3660046139af565b610877565b61022c61024f3660046139f2565b610948565b61022c6102623660046139af565b610dfa565b61028a6102753660046138ea565b60009081526012602052604090206003015490565b6040519081526020016101f0565b6101dc6102a63660046138ea565b600090815260116020526040902060020154600160c01b90046001600160401b031690565b61028a6102d93660046138ea565b611046565b6102f16102ec3660046138ea565b61105f565b60405160ff90911681526020016101f0565b61028a6103113660046138ea565b611072565b61031e6110d1565b6040516101f09190613a32565b6103576103393660046138ea565b6000908152601260205260409020600401546001600160a01b031690565b6040516001600160a01b0390911681526020016101f0565b6103776110f8565b6040516101f09190613b10565b61022c6103923660046138ea565b61126f565b61031e61127c565b61022c6103ad366004613b98565b61129b565b61022c6103c03660046138ea565b6117e1565b6103d86103d33660046138ea565b611833565b60405190151581526020016101f0565b6103fb6103f63660046138ea565b61186f565b6040516101f09190613cc7565b61041b6104163660046138ea565b611b51565b6040516101f09190613d02565b6103d86104363660046138ea565b611c1f565b61022c610449366004613d16565b611c32565b6103d861045c3660046139af565b6120b3565b61022c61046f366004613d3b565b612155565b6101dc6104823660046138ea565b6000908152600660205260409020546001600160401b031690565b6104b06104ab3660046138ea565b6122ce565b6040516101f09190613d69565b7f0000000000000000000000000000000000000000000000000000000000000000610357565b6000806104ef836105c1565b9050600081600481111561050557610505613903565b14806105225750600181600481111561052057610520613903565b145b1561054e575050600090815260116020526040902060020154600160801b90046001600160401b031690565b600281600481111561056257610562613903565b0361058e575050600090815260116020526040902060020154600160c01b90046001600160401b031690565b6000838152601160205260409020600201546105ba90600160801b90046001600160401b0316426124e4565b9392505050565b60008181526010602052604081205482906001600160a01b03166105f857604051635eeb253d60e11b815260040160405180910390fd5b600083815260116020526040812090815460ff16600481111561061d5761061d613903565b14801561065c5750600084815260116020526040902060020154600160c01b90046001600160401b03166001600160401b0316426001600160401b0316115b1561066b5760029250506106de565b6001815460ff16600481111561068357610683613903565b14806106a457506000815460ff1660048111156106a2576106a2613903565b145b80156106c8575060028101546001600160401b03600160801b909104811642909116115b156106d75760039250506106de565b5460ff1691505b50919050565b826000808281526012602052604090205460ff16600681111561070957610709613903565b0361072757604051638b41ec7f60e01b815260040160405180910390fd5b600084815260126020526040902060048101546001600160a01b0316331461077b576040517f57a6f4e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061078686611b51565b9050600481600681111561079c5761079c613903565b036107d3576040517fc2cbf77700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028160068111156107e7576107e7613903565b03610801576107fc82600101548787876124f4565b61086f565b600581600681111561081557610815613903565b0361082a576107fc826001015487878761273d565b600381600681111561083e5761083e613903565b0361084d576107fc3387612986565b600181600681111561086157610861613903565b0361086f5761086f866129a8565b505050505050565b61088182826120b3565b6108b7576040517f424a04ab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006108c38383612bf8565b60008181526020819052604090209091506108de9033612c3d565b50600154600082815260208190526040902060ff909116906108ff90612c52565b03610943576040516001600160401b038316815283907fc8e6c955744189a19222ec226b72ac1435d88d5745252dac56e6f679f64c037a9060200160405180910390a25b505050565b60008381526010602052604090205483906001600160a01b031661097f57604051635eeb253d60e11b815260040160405180910390fd5b600084815260106020526040902060048101546001600160401b03908116908516106109d7576040517f3b920b8800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006109e38686612bf8565b60008181526020819052604090209091506109fe9033612c5c565b610a34576040517fd651ce1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000818152601260209081526040808320600181018a90556002810180546fffffffffffffffff00000000000000001916600160401b6001600160401b038c1602179055898452601190925282209091610a8d84611b51565b6006811115610a9e57610a9e613903565b14158015610ac657506006610ab284611b51565b6006811115610ac357610ac3613903565b14155b15610afd576040517fff556acf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60048201805473ffffffffffffffffffffffffffffffffffffffff1916331790556002820180546001600160401b03421667ffffffffffffffff19909116179055610b6e83600090815260056020526040902080546001600160401b03421667ffffffffffffffff19909116179055565b610b788387612155565b60028101805460019190600090610b999084906001600160401b0316613d92565b92506101000a8154816001600160401b0302191690836001600160401b03160217905550610bde888360020160009054906101000a90046001600160401b0316612c7e565b816001016000828254610bf19190613db1565b90915550506040805160e081018252600186015481526002860154602082015260038601549181019190915260048501546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c08201526000908190610c6a90612cad565b90506006610c7786611b51565b6006811115610c8857610c88613903565b03610cbb57600b54606490610ca09060ff1683613dc4565b610caa9190613df1565b610cb49082613db1565b9150610cbf565b8091505b610cc93383612ccc565b8160136000016000828254610cde9190613e05565b9091555050600384018190556004840154610d02906001600160a01b031686612da0565b835460ff191660011784556040516001600160401b038a1681528a907f8f301470a994578b52323d625dfbf827ca5208c81747d3459be7b8867baec3ec9060200160405180910390a2600486015460028401546001600160401b039081169116148015610d8457506000835460ff166004811115610d8257610d82613903565b145b15610dee57825460ff191660011783556002830180546001600160401b034216600160401b026fffffffffffffffff0000000000000000199091161790556040518a907f85e1543bf2f84fe80c6badbce3648c8539ad1df4d2b3d822938ca0538be727e690600090a25b50505050505050505050565b6001610e0583611b51565b6006811115610e1657610e16613903565b14610e4d576040517fae9dcffd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610e578282612dc2565b6000828152601260209081526040808320600180820154855260108452828520600b54845160e08101865292820154835260028201549583019590955260038101549382019390935260048301546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0820152909391926064916201000090910460ff1690610efa90612cad565b610f049190613dc4565b610f0e9190613df1565b600b54909150600090606490610f2e906301000000900460ff1684613dc4565b610f389190613df1565b90508060136001016000828254610f4f9190613e05565b909155505060405163a9059cbb60e01b8152336004820152602481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063a9059cbb906044016020604051808303816000875af1158015610fc1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fe59190613e18565b610ff157610ff1613e3a565b818460030160008282546110059190613db1565b9091555050600b5460008781526006602052604090205461010090910460ff16906001600160401b03166001600160401b03161061086f5761086f866129a8565b600061105982611054612fd9565b612fe4565b92915050565b60006110598261106d612fd9565b612ff8565b60008181526012602090815260408083206001810154845260109092528220600c54610100906110ac90600160801b900460ff1682613e50565b60018301546110bf9161ffff1690613dc4565b6110c99190613df1565b949350505050565b336000908152600a602052604090206060906110f3906110f09061308a565b90565b905090565b611100613874565b604080516101008082018352600b805460ff8082166080808701918252948304821660a080880191909152620100008404831660c08801526301000000909304821660e0870152855285519182018652600c80546001600160401b038082168552600160401b820416602085810191909152600160801b82048416988501989098527101000000000000000000000000000000000090049091166060830152600d80549596939593870194929391928401916111bb90613e6a565b80601f01602080910402602001604051908101604052809291908181526020018280546111e790613e6a565b80156112345780601f1061120957610100808354040283529160200191611234565b820191906000526020600020905b81548152906001019060200180831161121757829003601f168201915b5050509190925250505081526040805160208181018352600385015460ff1682528301526004909201546001600160401b0316910152919050565b6112798133611c32565b50565b3360009081526009602052604090206060906110f3906110f09061308a565b60006112ae6112a983613ffb565b613097565b9050336112be6020840184614104565b6001600160a01b0316146112e5576040516334c69e3160e11b815260040160405180910390fd5b6000818152601060205260409020546001600160a01b031615611334576040517ffc7d069000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61134661014083016101208401614121565b6001600160401b0316158061138d575061136660e0830160c08401614121565b6001600160401b031661138161014084016101208501614121565b6001600160401b031610155b156113c4576040517fdf63f61a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113d460a0830160808401614121565b6001600160401b0316600003611416576040517f535ed2be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61142660a0830160808401614121565b6001600160401b0316611440610100840160e08501614121565b6001600160401b03161115611481576040517fb9551ab100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61149160e0830160c08401614121565b6001600160401b03166000036114d3576040517f090a5ecd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020820135600003611511576040517f6aba7aae00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606082013560000361154f576040517ffb7df0c700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604082013560000361158d576040517f47ba51c700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61159b61010083018361413e565b6115a5908061415e565b90506000036115e0576040517f86f8cf9b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600f546001600160401b03166115fc60e0840160c08501614121565b6001600160401b0316111561163d576040517f1267b3f200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000818152601060205260409020829061165782826142fe565b5061166a905060e0830160c08401614121565b6116749042613d92565b600082815260116020526040902060020180546001600160401b0392909216600160801b0267ffffffffffffffff60801b199092169190911790556116c161014083016101208401614121565b6116cb9042613d92565b600082815260116020908152604090912060020180546001600160401b0393909316600160c01b0277ffffffffffffffffffffffffffffffffffffffffffffffff9093169290921790915561172c9061172690840184614104565b826130c7565b600061173f61173a84613ffb565b6130e9565b600083815260116020526040812060010182905560138054929350839290919061176a908490613e05565b9091555061177a90503382612ccc565b6000828152601160209081526040918290206002015491517f1bf9c457accf8703dbf7cdf1b58c2f74ddf2e525f98155c70b3d318d74609bd8926117d492869290880191600160c01b90046001600160401b0316906144b2565b60405180910390a1505050565b806000808281526012602052604090205460ff16600681111561180657611806613903565b0361182457604051638b41ec7f60e01b815260040160405180910390fd5b61182f8233336106e4565b5050565b600080600061184984611844612fd9565b613125565b90925090508180156110c95750600254600160801b900460ff9081169116109392505050565b6118f260405180604001604052806138dd6040805160a080820183526000808352835160e081018552818152602080820183905281860183905260608083018490526080830184905293820183905260c0820183905280850191909152845180860186529283528201529091820190815260006020820181905260409091015290565b816000808281526012602052604090205460ff16600681111561191757611917613903565b0361193557604051638b41ec7f60e01b815260040160405180910390fd5b60008381526012602052604090206119c660405180604001604052806138dd6040805160a080820183526000808352835160e081018552818152602080820183905281860183905260608083018490526080830184905293820183905260c0820183905280850191909152845180860186529283528201529091820190815260006020820181905260409091015290565b600180830154600090815260106020908152604091829020825160a0808201855282546001600160a01b03168252845160e08101865295830154865260028301548685015260038301548686015260048301546001600160401b038082166060890152600160401b820481166080890152600160801b8204811692880192909252600160c01b90041660c0860152918201939093528151808301835260058401805492949385019282908290611a7b90613e6a565b80601f0160208091040260200160405190810160405280929190818152602001828054611aa790613e6a565b8015611af45780601f10611ac957610100808354040283529160200191611af4565b820191906000526020600020905b815481529060010190602001808311611ad757829003601f168201915b50505091835250506001919091015460209182015290825260078301546001600160401b0390811683830152600890930154604090920191909152918352600290930154600160401b900490921691810191909152915050919050565b600081815260126020526040812060018101548203611b735750600092915050565b6000611b8282600101546105c1565b90506004825460ff166006811115611b9c57611b9c613903565b03611bab575060049392505050565b6002816004811115611bbf57611bbf613903565b03611bce575060059392505050565b6003816004811115611be257611be2613903565b03611bf1575060029392505050565b6004816004811115611c0557611c05613903565b03611c14575060039392505050565b505460ff1692915050565b600061105982611c2d612fd9565b6131dd565b60008281526010602052604090205482906001600160a01b0316611c6957604051635eeb253d60e11b815260040160405180910390fd5b6000838152601060209081526040808320601190925290912081546001600160a01b03163314611cac576040516334c69e3160e11b815260040160405180910390fd5b6000611cb7866105c1565b90506002816004811115611ccd57611ccd613903565b14158015611ced57506004816004811115611cea57611cea613903565b14155b8015611d0b57506003816004811115611d0857611d08613903565b14155b15611d42576040517fc00b5b5700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8160010154600003611d80576040517fbd8bdd9400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002816004811115611d9457611d94613903565b03611e3257815460ff1916600217825560405186907ff903f4774c7bd27355f9d7fcbc382b079b164a697a44ac5d95267a4c3cb3bb2290600090a2600086815260116020526040902060020154611dfc908790600160c01b90046001600160401b0316612c7e565b6002830154611e1491906001600160401b0316613dc4565b826001016000828254611e279190613e05565b90915550611fbf9050565b6004816004811115611e4657611e46613903565b03611fb3576040805160a0808201835285546001600160a01b03168252825160e08101845260018701548152600287015460208281019190915260038801548286015260048801546001600160401b038082166060850152600160401b820481166080850152600160801b8204811694840194909452600160c01b900490921660c08201529082015281518083018352600586018054611fa994889390850192909182908290611ef590613e6a565b80601f0160208091040260200160405190810160405280929190818152602001828054611f2190613e6a565b8015611f6e5780601f10611f4357610100808354040283529160200191611f6e565b820191906000526020600020905b815481529060010190602001808311611f5157829003601f168201915b50505091835250506001919091015460209182015290825260078301546001600160401b0316908201526008909101546040909101526130e9565b6001830155611fbf565b815460ff191660031782555b8254611fd4906001600160a01b031687613217565b600182015460148054829190600090611fee908490613e05565b909155505060405163a9059cbb60e01b81526001600160a01b038781166004830152602482018390527f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af1158015612062573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120869190613e18565b6120a357604051637c2ccffd60e11b815260040160405180910390fd5b5050600060019091015550505050565b600033816120c18585612bf8565b905060006120ce82611b51565b905060008160068111156120e4576120e4613903565b1480612101575060068160068111156120ff576120ff613903565b145b801561212a5750600154600083815260208190526040902060ff9091169061212890612c52565b105b801561214b575060008281526020819052604090206121499084612c5c565b155b9695505050505050565b6000828152601260209081526040808320600101548084526010909252909120546001600160a01b031661219c57604051635eeb253d60e11b815260040160405180910390fd5b600083815260126020526040902060048101546001600160a01b031633146121f0576040517fce351b9400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001810154600090815260106020526040808220815160038082526080820190935290929181602001602082028036833701905050905061223861223387611046565b613239565b8160008151811061224b5761224b61455f565b602090810291909101015260068201546122649061324a565b816001815181106122775761227761455f565b6020026020010181815250508260020160089054906101000a90046001600160401b03166001600160401b0316816002815181106122b7576122b761455f565b60200260200101818152505061086f868683613256565b6123436040805160a080820183526000808352835160e081018552818152602080820183905281860183905260608083018490526080830184905293820183905260c0820183905280850191909152845180860186529283528201529091820190815260006020820181905260409091015290565b60008281526010602052604090205482906001600160a01b031661237a57604051635eeb253d60e11b815260040160405180910390fd5b600083815260106020908152604091829020825160a0808201855282546001600160a01b03168252845160e0810186526001840154815260028401548186015260038401548187015260048401546001600160401b038082166060840152600160401b820481166080840152600160801b8204811693830193909352600160c01b900490911660c0820152928101929092528251808401845260058201805493949293928501928290829061242e90613e6a565b80601f016020809104026020016040519081016040528092919081815260200182805461245a90613e6a565b80156124a75780601f1061247c576101008083540402835291602001916124a7565b820191906000526020600020905b81548152906001019060200180831161248a57829003601f168201915b50505091835250506001919091015460209182015290825260078301546001600160401b0316908201526008909101546040909101529392505050565b60008282188284100282186105ba565b60008481526010602052604090205484906001600160a01b031661252b57604051635eeb253d60e11b815260040160405180910390fd5b600085815260116020908152604080832060108352818420815460ff1916600317825588855260129093529220815461256d906001600160a01b031689613217565b6004810154612585906001600160a01b031688612986565b60028101546000906125a1908a906001600160401b0316612c7e565b60038301549091506125b38183613e05565b601480546000906125c5908490613e05565b90915550508254600490849060ff1916600183021790555060405163a9059cbb60e01b81526001600160a01b038981166004830152602482018490527f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af115801561264c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126709190613e18565b61268d57604051637c2ccffd60e11b815260040160405180910390fd5b60405163a9059cbb60e01b81526001600160a01b038881166004830152602482018390527f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af11580156126fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127209190613e18565b610dee57604051637c2ccffd60e11b815260040160405180910390fd5b60008481526010602052604090205484906001600160a01b031661277457604051635eeb253d60e11b815260040160405180910390fd5b6000848152601260205260409020600481015461279a906001600160a01b031686612986565b60028101546000906127e09088906001600160401b03166127db826000908152601160205260409020600201546001600160401b03600160c01b9091041690565b6133f4565b60038301549091506127f28183613e05565b60148054600090612804908490613e05565b90915550508254600490849060ff1916600183021790555060405163a9059cbb60e01b81526001600160a01b038781166004830152602482018490527f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af115801561288b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128af9190613e18565b6128cc57604051637c2ccffd60e11b815260040160405180910390fd5b60405163a9059cbb60e01b81526001600160a01b038681166004830152602482018390527f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af115801561293b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061295f9190613e18565b61297c57604051637c2ccffd60e11b815260040160405180910390fd5b5050505050505050565b6001600160a01b0382166000908152600a6020526040902061094390826134d3565b600081815260126020908152604080832060018101548085526011909352922060028301546129e19083906001600160401b0316612c7e565b8160010160008282546129f49190613e05565b90915550506004830154612a11906001600160a01b031685612986565b6000848152602081905260409020612a28906134df565b825460ff191660061783556002808401805467ffffffffffffffff1916905560006003850181905560048501805473ffffffffffffffffffffffffffffffffffffffff19169055908201805460019290612a8c9084906001600160401b0316614575565b82546101009290920a6001600160401b038181021990931691831602179091556002850154604051600160401b90910490911681528391507f33ba8f7627565d89f7ada2a6b81ea532b7aa9b11e91a78312d6e1fca0bfcd1dc9060200160405180910390a26000848152600660205260409020805467ffffffffffffffff19169055600082815260106020526040812060028301546004820154919291612b3f916001600160401b039081169116614575565b60048301546001600160401b039182169250600160c01b90041681118015612b7c57506001835460ff166004811115612b7a57612b7a613903565b145b1561086f57825460ff19166004178355612b97600142614575565b6002840180546001600160401b0392909216600160801b0267ffffffffffffffff60801b1990921691909117905560405184907f4769361a442504ecaf038f35e119bcccdd5e42096b24c09e3c17fd17c6684c0290600090a2505050505050565b60008282604051602001612c1f9291909182526001600160401b0316602082015260400190565b60405160208183030381529060405280519060200120905092915050565b60006105ba836001600160a01b0384166134e8565b6000611059825490565b6001600160a01b038116600090815260018301602052604081205415156105ba565b6000828152601160205260408120600201546105ba9084908490600160801b90046001600160401b03166133f4565b600081608001516001600160401b031682604001516110599190613dc4565b6040517f23b872dd0000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152306024830181905260448301849052917f0000000000000000000000000000000000000000000000000000000000000000909116906323b872dd906064016020604051808303816000875af1158015612d5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d839190613e18565b61094357604051637c2ccffd60e11b815260040160405180910390fd5b6001600160a01b0382166000908152600a602052604090206109439082613537565b6000612dcd82613543565b6001600160401b03169050428110612e11576040517f6b4b1a4e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600254612e2e90600160401b90046001600160401b031682613e05565b4210612e66576040517fde55698e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008381526007602090815260408083206001600160401b038616845290915290205460ff1615612ec2576040517efab7d900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612ecc83836131dd565b612f02576040517fd3ffa66b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008381526008602090815260408083206001600160401b038616845290915290205460ff1615612f5f576040517f98e7e55100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008381526008602090815260408083206001600160401b038087168552908352818420805460ff1916600190811790915587855260069093529083208054929390929091612fb091859116613d92565b92506101000a8154816001600160401b0302191690836001600160401b03160217905550505050565b60006110f342613556565b60006105ba612ff38484612ff8565b613582565b60008061300761010043614594565b600254909150600090610100906130369071010000000000000000000000000000000000900460ff16866145a8565b61304091906145ca565b6001600160401b03169050600061305961010087614594565b905060006101008261306b8587613e05565b6130759190613e05565b61307f9190614594565b979650505050505050565b606060006105ba836135dc565b6000816040516020016130aa9190613d69565b604051602081830303815290604052805190602001209050919050565b6001600160a01b03821660009081526009602052604090206109439082613537565b60006130f88260200151613638565b602083015160a081015160609091015161311291906145a8565b6001600160401b03166110599190613dc4565b600080600061313385611b51565b60008681526005602052604081205491925090613158906001600160401b0316613556565b9050600182600681111561316e5761316e613903565b14158061318257506131808582613657565b155b15613195576000809350935050506131d6565b61319f8686612ff8565b925060006131ac84613582565b905060006131b988611072565b90508015806131cf57506131cd8183614594565b155b9550505050505b9250929050565b60008060006131ec8585613125565b909250905081801561320e575060025460ff600160801b909104811690821610155b95945050505050565b6001600160a01b038216600090815260096020526040902061094390826134d3565b600060ff198216816110c98261366d565b6000806105ba8361366d565b60008381526007602052604081209061326d612fd9565b6001600160401b0316815260208101919091526040016000205460ff16156132c1576040517f3edef7db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600480546040517f94c8919d0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116916394c8919d9161330b9186918691016145f8565b602060405180830381865afa158015613328573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061334c9190613e18565b613382576040517ffcd03a4700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600083815260076020526040812060019161339b612fd9565b6001600160401b031681526020808201929092526040908101600020805460ff19169315159390931790925590518481527f3b989d183b84b02259d7c14b34a9c9eb0fccb4c355a920d25e581e25aef4993d91016117d4565b60008381526010602052604081206001600160401b0380841690851610613447576040517f56607cb000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160e081018252600183015481526002830154602082015260038301549181019190915260048201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c08201526134b690613638565b6134c08585614575565b6001600160401b031661320e9190613dc4565b60006105ba83836136df565b611279816137d9565b600081815260018301602052604081205461352f57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155611059565b506000611059565b60006105ba83836134e8565b60006110596135518361383b565b613848565b60006110597f0000000000000000000000000000000000000000000000000000000000000000836146a2565b60008060ff8316613594600143613db1565b61359e9190613db1565b40905060008190036135b2576135b2613e3a565b60408051602081018390520160405160208183030381529060405280519060200120915050919050565b60608160000180548060200260200160405190810160405280929190818152602001828054801561362c57602002820191906000526020600020905b815481526020019060010190808311613618575b50505050509050919050565b600081608001516001600160401b031682602001516110599190613dc4565b60006001600160401b03808416908316106105ba565b7fff00000000000000000000000000000000000000000000000000000000000000811660015b60208110156106de57600891821c916136ad908290613dc4565b83901b7fff00000000000000000000000000000000000000000000000000000000000000169190911790600101613693565b600081815260018301602052604081205480156137c8576000613703600183613db1565b855490915060009061371790600190613db1565b905080821461377c5760008660000182815481106137375761373761455f565b906000526020600020015490508087600001848154811061375a5761375a61455f565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061378d5761378d6146d0565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050611059565b6000915050611059565b5092915050565b60006137e3825490565b905060005b818110156138335782600101600084600001838154811061380b5761380b61455f565b90600052602060002001548152602001908152602001600020600090558060010190506137e8565b505060009055565b6000611059826001613d92565b60006110597f0000000000000000000000000000000000000000000000000000000000000000836145a8565b60408051610100810182526000608080830182815260a080850184905260c0850184905260e08501849052908452845190810185528281526020808201849052818601849052606080830185905292820192909252818401528351908101845290815290918201905b8152600060209091015290565b6000602082840312156138fc57600080fd5b5035919050565b634e487b7160e01b600052602160045260246000fd5b602081016005831061392d5761392d613903565b91905290565b6001600160a01b038116811461127957600080fd5b60008060006060848603121561395d57600080fd5b83359250602084013561396f81613933565b9150604084013561397f81613933565b809150509250925092565b6001600160401b038116811461127957600080fd5b80356139aa8161398a565b919050565b600080604083850312156139c257600080fd5b8235915060208301356139d48161398a565b809150509250929050565b600061010082840312156106de57600080fd5b60008060006101408486031215613a0857600080fd5b833592506020840135613a1a8161398a565b9150613a2985604086016139df565b90509250925092565b602080825282518282018190526000918401906040840190835b81811015613a6a578351835260209384019390920191600101613a4c565b509095945050505050565b6000815180845260005b81811015613a9b57602081850181015186830182015201613a7f565b506000602082860101526020601f19601f83011685010191505092915050565b6001600160401b0381511682526001600160401b03602082015116602083015260ff604082015116604083015260ff60608201511660608301526000608082015160a060808501526110c960a0850182613a75565b602081526000825160ff815116602084015260ff602082015116604084015260ff604082015116606084015260ff606082015116608084015250602083015160e060a0840152613b64610100840182613abb565b90506040840151613b7b60c08501825160ff169052565b5060608401516001600160401b03811660e0850152509392505050565b600060208284031215613baa57600080fd5b81356001600160401b03811115613bc057600080fd5b820161016081850312156105ba57600080fd5b6000815160408452613be86040850182613a75565b602093840151949093019390935250919050565b6001600160a01b038151168252600060208201518051602085015260208101516040850152604081015160608501526001600160401b0360608201511660808501526001600160401b0360808201511660a08501526001600160401b0360a08201511660c08501526001600160401b0360c08201511660e0850152506040820151610160610100850152613c94610160850182613bd3565b90506060830151613cb16101208601826001600160401b03169052565b5060808301516101408501528091505092915050565b602081526000825160406020840152613ce36060840182613bfc565b90506001600160401b0360208501511660408401528091505092915050565b602081016007831061392d5761392d613903565b60008060408385031215613d2957600080fd5b8235915060208301356139d481613933565b6000806101208385031215613d4f57600080fd5b82359150613d6084602085016139df565b90509250929050565b6020815260006105ba6020830184613bfc565b634e487b7160e01b600052601160045260246000fd5b6001600160401b03818116838216019081111561105957611059613d7c565b8181038181111561105957611059613d7c565b808202811582820484141761105957611059613d7c565b634e487b7160e01b600052601260045260246000fd5b600082613e0057613e00613ddb565b500490565b8082018082111561105957611059613d7c565b600060208284031215613e2a57600080fd5b815180151581146105ba57600080fd5b634e487b7160e01b600052600160045260246000fd5b61ffff828116828216039081111561105957611059613d7c565b600181811c90821680613e7e57607f821691505b6020821081036106de57634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715613ed657613ed6613e9e565b60405290565b60405160a081016001600160401b0381118282101715613ed657613ed6613e9e565b60405160e081016001600160401b0381118282101715613ed657613ed6613e9e565b604051601f8201601f191681016001600160401b0381118282101715613f4857613f48613e9e565b604052919050565b600060408284031215613f6257600080fd5b613f6a613eb4565b905081356001600160401b03811115613f8257600080fd5b8201601f81018413613f9357600080fd5b80356001600160401b03811115613fac57613fac613e9e565b613fbf601f8201601f1916602001613f20565b818152856020838501011115613fd457600080fd5b81602084016020830137600060209282018301528352928301359282019290925292915050565b600081360361016081121561400f57600080fd5b614017613edc565b833561402281613933565b815260e0601f198301121561403657600080fd5b61403e613efe565b6020858101358252604080870135918301919091526060860135908201529150608084013561406c8161398a565b606083015260a084013561407f8161398a565b608083015260c08401356140928161398a565b60a083015260e08401356140a58161398a565b60c08301526020810191909152610100830135906001600160401b038211156140cd57600080fd5b6140d936838601613f50565b60408201526140eb610120850161399f565b6060820152610140939093013560808401525090919050565b60006020828403121561411657600080fd5b81356105ba81613933565b60006020828403121561413357600080fd5b81356105ba8161398a565b60008235603e1983360301811261415457600080fd5b9190910192915050565b6000808335601e1984360301811261417557600080fd5b8301803591506001600160401b0382111561418f57600080fd5b6020019150368190038213156131d657600080fd5b600081356110598161398a565b601f82111561094357806000526020600020601f840160051c810160208510156141d85750805b601f840160051c820191505b818110156141f857600081556001016141e4565b5050505050565b8135601e1983360301811261421357600080fd5b820180356001600160401b038111801561422c57600080fd5b81360360208401131561423e57600080fd5b60009050614256826142508654613e6a565b866141b1565b80601f83116001811461428b578284156142735750848201602001355b600019600386901b1c1916600185901b1786556142ea565b600086815260209020601f19851690845b828110156142be5760208589018101358355948501946001909201910161429c565b50858210156142de5760001960f88760031b161c19602085890101351681555b505060018460011b0186555b505050505060209190910135600190910155565b813561430981613933565b815473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03919091161781556020820135600182015560408201356002820155606082013560038201556004810160808301356143618161398a565b815467ffffffffffffffff19166001600160401b0382161782555060a083013561438a8161398a565b81546fffffffffffffffff0000000000000000191660409190911b6fffffffffffffffff0000000000000000161781556143fe6143c960c085016141a4565b825467ffffffffffffffff60801b191660809190911b77ffffffffffffffff0000000000000000000000000000000016178255565b61445661440d60e085016141a4565b825477ffffffffffffffffffffffffffffffffffffffffffffffff1660c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016178255565b5061447161446861010084018461413e565b600583016141ff565b6144a261448161012084016141a4565b600783016001600160401b0382166001600160401b03198254161781555050565b6101409190910135600890910155565b83815282356020808301919091528301356040808301919091528301356060808301919091526101208201908401356144ea8161398a565b6001600160401b03811660808401525060808401356145088161398a565b6001600160401b03811660a08401525060a08401356145268161398a565b6001600160401b03811660c08401525061454260c0850161399f565b6001600160401b0390811660e084015283166101008301526110c9565b634e487b7160e01b600052603260045260246000fd5b6001600160401b03828116828216039081111561105957611059613d7c565b6000826145a3576145a3613ddb565b500690565b6001600160401b0381811683821602908116908181146137d2576137d2613d7c565b60006001600160401b038316806145e3576145e3613ddb565b806001600160401b0384160691505092915050565b823581526020808401359082015260006101208201614627604084016040870180358252602090810135910152565b614641608084016080870180358252602090810135910152565b61465b60c0840160c0870180358252602090810135910152565b610120610100840152835190819052602084019061014084019060005b81811015614696578351835260209384019390920191600101614678565b50909695505050505050565b60006001600160401b038316806146bb576146bb613ddb565b806001600160401b0384160491505092915050565b634e487b7160e01b600052603160045260246000fdfea26469706673582212203444a73360bb50dd0606abd72470bb042d6e86a23b0e86c86dd00cdc8a0275f564736f6c634300081c0033"; + public static string BYTECODE = "0x60c060405234801561001057600080fd5b50604051614faf380380614faf83398101604081905261002f9161053b565b602083015180516040850151516001805460ff191660ff90921691909117905582906001600160401b03811660000361007b5760405163015536c760e51b815260040160405180910390fd5b6001600160401b031660805261010043116100a9576040516338f5f66160e11b815260040160405180910390fd5b8151600280546020850151604086015160608701516001600160401b039586166001600160801b0319909416939093176801000000000000000095909216949094021761ffff60801b1916600160801b60ff9485160260ff60881b191617600160881b9390911692909202919091178155608083015183919060039061012f90826106d9565b5050600480546001600160a01b0319166001600160a01b0393841617905550831660a05250825151606460ff909116111561017d576040516302bd816360e41b815260040160405180910390fd5b606483600001516040015160ff1611156101aa576040516354e5e0ab60e11b815260040160405180910390fd5b825160408101516020909101516064916101c391610797565b60ff1611156101e5576040516317ff9d0f60e21b815260040160405180910390fd5b82518051600b805460208085015160408087015160609788015160ff90811663010000000263ff0000001992821662010000029290921663ffff0000199482166101000261ffff1990971698821698909817959095179290921695909517178355808801518051600c80549383015196830151978301518516600160881b0260ff60881b1998909516600160801b029790971661ffff60801b196001600160401b0397881668010000000000000000026001600160801b031990951697909216969096179290921791909116939093171783556080820151869391929190600d906102d090826106d9565b50505060408201515160038201805460ff191660ff909216919091179055606090910151600490910180546001600160401b0319166001600160401b03909216919091179055506107c8915050565b634e487b7160e01b600052604160045260246000fd5b60405160a081016001600160401b03811182821017156103575761035761031f565b60405290565b604051608081016001600160401b03811182821017156103575761035761031f565b604051601f8201601f191681016001600160401b03811182821017156103a7576103a761031f565b604052919050565b805160ff811681146103c057600080fd5b919050565b80516001600160401b03811681146103c057600080fd5b600060a082840312156103ee57600080fd5b6103f6610335565b9050610401826103c5565b815261040f602083016103c5565b6020820152610420604083016103af565b6040820152610431606083016103af565b606082015260808201516001600160401b0381111561044f57600080fd5b8201601f8101841361046057600080fd5b80516001600160401b038111156104795761047961031f565b61048c601f8201601f191660200161037f565b8181528560208385010111156104a157600080fd5b60005b828110156104c0576020818501810151838301820152016104a4565b5060006020838301015280608085015250505092915050565b6000602082840312156104eb57600080fd5b604051602081016001600160401b038111828210171561050d5761050d61031f565b60405290508061051c836103af565b905292915050565b80516001600160a01b03811681146103c057600080fd5b60008060006060848603121561055057600080fd5b83516001600160401b0381111561056657600080fd5b840180860360e081121561057957600080fd5b61058161035d565b608082121561058f57600080fd5b61059761035d565b91506105a2836103af565b82526105b0602084016103af565b60208301526105c1604084016103af565b60408301526105d2606084016103af565b60608301529081526080820151906001600160401b038211156105f457600080fd5b610600888385016103dc565b60208201526106128860a085016104d9565b604082015261062360c084016103c5565b6060820152945061063991505060208501610524565b915061064760408501610524565b90509250925092565b600181811c9082168061066457607f821691505b60208210810361068457634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156106d457806000526020600020601f840160051c810160208510156106b15750805b601f840160051c820191505b818110156106d157600081556001016106bd565b50505b505050565b81516001600160401b038111156106f2576106f261031f565b610706816107008454610650565b8461068a565b6020601f82116001811461073a57600083156107225750848201515b600019600385901b1c1916600184901b1784556106d1565b600084815260208120601f198516915b8281101561076a578785015182556020948501946001909201910161074a565b50848210156107885786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b60ff81811683821602908116908181146107c157634e487b7160e01b600052601160045260246000fd5b5092915050565b60805160a05161478a610825600039600081816104dd01528181610f76015281816120390152818161266801528181612718015281816128a7015281816129570152612d790152600081816135b801526138bd015261478a6000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c80636e2b54ee11610104578063c0cc4add116100a2578063e8aa0a0711610071578063e8aa0a071461047f578063f752196b14610492578063fb1e61ca146104bb578063fc0c546a146104db57600080fd5b8063c0cc4add14610433578063c5d4335114610446578063d02bbe3314610459578063d1bb36b61461046c57600080fd5b8063a29c29a4116100de578063a29c29a4146103bd578063a3a0807e146103d0578063b396dc79146103f3578063be5cdc481461041357600080fd5b80636e2b54ee1461038f5780639777b72c146103a257806399b6da0c146103aa57600080fd5b8063329b5a0b1161017157806351a766421161014b57806351a766421461030e5780635da73835146103215780636b00c8cf146103365780636c70bee91461037a57600080fd5b8063329b5a0b146102a3578063458d2bf1146102d65780634641dce6146102e957600080fd5b806312827602116101ad57806312827602146102395780631d873c1b1461024c578063237d84821461025f57806326d6f8341461027257600080fd5b806302fa8e65146101d457806305b90773146102045780630aefaabe14610224575b600080fd5b6101e76101e2366004613958565b610501565b6040516001600160401b0390911681526020015b60405180910390f35b610217610212366004613958565b6105df565b6040516101fb9190613987565b6102376102323660046139b6565b610702565b005b610237610247366004613a1d565b610895565b61023761025a366004613a60565b610966565b61023761026d366004613a1d565b610e18565b610295610280366004613958565b60009081526012602052604090206003015490565b6040519081526020016101fb565b6101e76102b1366004613958565b600090815260116020526040902060020154600160c01b90046001600160401b031690565b6102956102e4366004613958565b611066565b6102fc6102f7366004613958565b61107f565b60405160ff90911681526020016101fb565b61029561031c366004613958565b611092565b6103296110f1565b6040516101fb9190613aa0565b610362610344366004613958565b6000908152601260205260409020600401546001600160a01b031690565b6040516001600160a01b0390911681526020016101fb565b610382611118565b6040516101fb9190613b7e565b61023761039d366004613958565b61128f565b61032961129c565b6102376103b8366004613c06565b6112bb565b6102376103cb366004613958565b611801565b6103e36103de366004613958565b611853565b60405190151581526020016101fb565b610406610401366004613958565b61188f565b6040516101fb9190613d35565b610426610421366004613958565b611b71565b6040516101fb9190613d70565b6103e3610441366004613958565b611c3f565b610237610454366004613d84565b611c52565b6103e3610467366004613a1d565b6120d3565b61023761047a366004613a1d565b612175565b61023761048d366004613da9565b6121ba565b6101e76104a0366004613958565b6000908152600660205260409020546001600160401b031690565b6104ce6104c9366004613958565b612333565b6040516101fb9190613dd7565b7f0000000000000000000000000000000000000000000000000000000000000000610362565b60008061050d836105df565b9050600081600481111561052357610523613971565b14806105405750600181600481111561053e5761053e613971565b145b1561056c575050600090815260116020526040902060020154600160801b90046001600160401b031690565b600281600481111561058057610580613971565b036105ac575050600090815260116020526040902060020154600160c01b90046001600160401b031690565b6000838152601160205260409020600201546105d890600160801b90046001600160401b031642612549565b9392505050565b60008181526010602052604081205482906001600160a01b031661061657604051635eeb253d60e11b815260040160405180910390fd5b600083815260116020526040812090815460ff16600481111561063b5761063b613971565b14801561067a5750600084815260116020526040902060020154600160c01b90046001600160401b03166001600160401b0316426001600160401b0316115b156106895760029250506106fc565b6001815460ff1660048111156106a1576106a1613971565b14806106c257506000815460ff1660048111156106c0576106c0613971565b145b80156106e6575060028101546001600160401b03600160801b909104811642909116115b156106f55760039250506106fc565b5460ff1691505b50919050565b826000808281526012602052604090205460ff16600681111561072757610727613971565b0361074557604051638b41ec7f60e01b815260040160405180910390fd5b600084815260126020526040902060048101546001600160a01b03163314610799576040517f57a6f4e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006107a486611b71565b905060048160068111156107ba576107ba613971565b036107f1576040517fc2cbf77700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600281600681111561080557610805613971565b0361081f5761081a8260010154878787612559565b61088d565b600581600681111561083357610833613971565b036108485761081a82600101548787876127a2565b600381600681111561085c5761085c613971565b0361086b5761081a33876129eb565b600181600681111561087f5761087f613971565b0361088d5761088d86612a0d565b505050505050565b61089f82826120d3565b6108d5576040517f424a04ab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006108e18383612c5d565b60008181526020819052604090209091506108fc9033612ca2565b50600154600082815260208190526040902060ff9091169061091d90612cb7565b03610961576040516001600160401b038316815283907fc8e6c955744189a19222ec226b72ac1435d88d5745252dac56e6f679f64c037a9060200160405180910390a25b505050565b60008381526010602052604090205483906001600160a01b031661099d57604051635eeb253d60e11b815260040160405180910390fd5b600084815260106020526040902060048101546001600160401b03908116908516106109f5576040517f3b920b8800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610a018686612c5d565b6000818152602081905260409020909150610a1c9033612cc1565b610a52576040517fd651ce1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000818152601260209081526040808320600181018a90556002810180546fffffffffffffffff00000000000000001916600160401b6001600160401b038c1602179055898452601190925282209091610aab84611b71565b6006811115610abc57610abc613971565b14158015610ae457506006610ad084611b71565b6006811115610ae157610ae1613971565b14155b15610b1b576040517fff556acf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60048201805473ffffffffffffffffffffffffffffffffffffffff1916331790556002820180546001600160401b03421667ffffffffffffffff19909116179055610b8c83600090815260056020526040902080546001600160401b03421667ffffffffffffffff19909116179055565b610b9683876121ba565b60028101805460019190600090610bb79084906001600160401b0316613e00565b92506101000a8154816001600160401b0302191690836001600160401b03160217905550610bfc888360020160009054906101000a90046001600160401b0316612ce3565b816001016000828254610c0f9190613e1f565b90915550506040805160e081018252600186015481526002860154602082015260038601549181019190915260048501546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c08201526000908190610c8890612d12565b90506006610c9586611b71565b6006811115610ca657610ca6613971565b03610cd957600b54606490610cbe9060ff1683613e32565b610cc89190613e5f565b610cd29082613e1f565b9150610cdd565b8091505b610ce73383612d31565b8160136000016000828254610cfc9190613e73565b9091555050600384018190556004840154610d20906001600160a01b031686612e05565b835460ff191660011784556040516001600160401b038a1681528a907f8f301470a994578b52323d625dfbf827ca5208c81747d3459be7b8867baec3ec9060200160405180910390a2600486015460028401546001600160401b039081169116148015610da257506000835460ff166004811115610da057610da0613971565b145b15610e0c57825460ff191660011783556002830180546001600160401b034216600160401b026fffffffffffffffff0000000000000000199091161790556040518a907f85e1543bf2f84fe80c6badbce3648c8539ad1df4d2b3d822938ca0538be727e690600090a25b50505050505050505050565b816001610e2482611b71565b6006811115610e3557610e35613971565b14610e535760405163ae9dcffd60e01b815260040160405180910390fd5b610e5d8383612e27565b6000838152601260209081526040808320600180820154855260108452828520600b54845160e08101865292820154835260028201549583019590955260038101549382019390935260048301546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0820152909391926064916201000090910460ff1690610f0090612d12565b610f0a9190613e32565b610f149190613e5f565b600b54909150600090606490610f34906301000000900460ff1684613e32565b610f3e9190613e5f565b90508060136001016000828254610f559190613e73565b909155505060405163a9059cbb60e01b8152336004820152602481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063a9059cbb906044016020604051808303816000875af1158015610fc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610feb9190613e86565b61100857604051637c2ccffd60e11b815260040160405180910390fd5b8184600301600082825461101c9190613e1f565b9091555050600b5460008881526006602052604090205461010090910460ff16906001600160401b03166001600160401b03161061105d5761105d87612a0d565b50505050505050565b600061107982611074612eaa565b612eb5565b92915050565b60006110798261108d612eaa565b612ec9565b60008181526012602090815260408083206001810154845260109092528220600c54610100906110cc90600160801b900460ff1682613ea8565b60018301546110df9161ffff1690613e32565b6110e99190613e5f565b949350505050565b336000908152600a602052604090206060906111139061111090612f5b565b90565b905090565b6111206138e2565b604080516101008082018352600b805460ff8082166080808701918252948304821660a080880191909152620100008404831660c08801526301000000909304821660e0870152855285519182018652600c80546001600160401b038082168552600160401b820416602085810191909152600160801b82048416988501989098527101000000000000000000000000000000000090049091166060830152600d80549596939593870194929391928401916111db90613ec2565b80601f016020809104026020016040519081016040528092919081815260200182805461120790613ec2565b80156112545780601f1061122957610100808354040283529160200191611254565b820191906000526020600020905b81548152906001019060200180831161123757829003601f168201915b5050509190925250505081526040805160208181018352600385015460ff1682528301526004909201546001600160401b0316910152919050565b6112998133611c52565b50565b3360009081526009602052604090206060906111139061111090612f5b565b60006112ce6112c983614053565b612f68565b9050336112de602084018461415c565b6001600160a01b031614611305576040516334c69e3160e11b815260040160405180910390fd5b6000818152601060205260409020546001600160a01b031615611354576040517ffc7d069000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61136661014083016101208401614179565b6001600160401b031615806113ad575061138660e0830160c08401614179565b6001600160401b03166113a161014084016101208501614179565b6001600160401b031610155b156113e4576040517fdf63f61a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113f460a0830160808401614179565b6001600160401b0316600003611436576040517f535ed2be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61144660a0830160808401614179565b6001600160401b0316611460610100840160e08501614179565b6001600160401b031611156114a1576040517fb9551ab100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114b160e0830160c08401614179565b6001600160401b03166000036114f3576040517f090a5ecd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020820135600003611531576040517f6aba7aae00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606082013560000361156f576040517ffb7df0c700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408201356000036115ad576040517f47ba51c700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6115bb610100830183614196565b6115c590806141b6565b9050600003611600576040517f86f8cf9b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600f546001600160401b031661161c60e0840160c08501614179565b6001600160401b0316111561165d576040517f1267b3f200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600081815260106020526040902082906116778282614356565b5061168a905060e0830160c08401614179565b6116949042613e00565b600082815260116020526040902060020180546001600160401b0392909216600160801b0267ffffffffffffffff60801b199092169190911790556116e161014083016101208401614179565b6116eb9042613e00565b600082815260116020908152604090912060020180546001600160401b0393909316600160c01b0277ffffffffffffffffffffffffffffffffffffffffffffffff9093169290921790915561174c906117469084018461415c565b82612f98565b600061175f61175a84614053565b612fba565b600083815260116020526040812060010182905560138054929350839290919061178a908490613e73565b9091555061179a90503382612d31565b6000828152601160209081526040918290206002015491517f1bf9c457accf8703dbf7cdf1b58c2f74ddf2e525f98155c70b3d318d74609bd8926117f492869290880191600160c01b90046001600160401b03169061450a565b60405180910390a1505050565b806000808281526012602052604090205460ff16600681111561182657611826613971565b0361184457604051638b41ec7f60e01b815260040160405180910390fd5b61184f823333610702565b5050565b600080600061186984611864612eaa565b612ff6565b90925090508180156110e95750600254600160801b900460ff9081169116109392505050565b611912604051806040016040528061394b6040805160a080820183526000808352835160e081018552818152602080820183905281860183905260608083018490526080830184905293820183905260c0820183905280850191909152845180860186529283528201529091820190815260006020820181905260409091015290565b816000808281526012602052604090205460ff16600681111561193757611937613971565b0361195557604051638b41ec7f60e01b815260040160405180910390fd5b60008381526012602052604090206119e6604051806040016040528061394b6040805160a080820183526000808352835160e081018552818152602080820183905281860183905260608083018490526080830184905293820183905260c0820183905280850191909152845180860186529283528201529091820190815260006020820181905260409091015290565b600180830154600090815260106020908152604091829020825160a0808201855282546001600160a01b03168252845160e08101865295830154865260028301548685015260038301548686015260048301546001600160401b038082166060890152600160401b820481166080890152600160801b8204811692880192909252600160c01b90041660c0860152918201939093528151808301835260058401805492949385019282908290611a9b90613ec2565b80601f0160208091040260200160405190810160405280929190818152602001828054611ac790613ec2565b8015611b145780601f10611ae957610100808354040283529160200191611b14565b820191906000526020600020905b815481529060010190602001808311611af757829003601f168201915b50505091835250506001919091015460209182015290825260078301546001600160401b0390811683830152600890930154604090920191909152918352600290930154600160401b900490921691810191909152915050919050565b600081815260126020526040812060018101548203611b935750600092915050565b6000611ba282600101546105df565b90506004825460ff166006811115611bbc57611bbc613971565b03611bcb575060049392505050565b6002816004811115611bdf57611bdf613971565b03611bee575060059392505050565b6003816004811115611c0257611c02613971565b03611c11575060029392505050565b6004816004811115611c2557611c25613971565b03611c34575060039392505050565b505460ff1692915050565b600061107982611c4d612eaa565b6130ae565b60008281526010602052604090205482906001600160a01b0316611c8957604051635eeb253d60e11b815260040160405180910390fd5b6000838152601060209081526040808320601190925290912081546001600160a01b03163314611ccc576040516334c69e3160e11b815260040160405180910390fd5b6000611cd7866105df565b90506002816004811115611ced57611ced613971565b14158015611d0d57506004816004811115611d0a57611d0a613971565b14155b8015611d2b57506003816004811115611d2857611d28613971565b14155b15611d62576040517fc00b5b5700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8160010154600003611da0576040517fbd8bdd9400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002816004811115611db457611db4613971565b03611e5257815460ff1916600217825560405186907ff903f4774c7bd27355f9d7fcbc382b079b164a697a44ac5d95267a4c3cb3bb2290600090a2600086815260116020526040902060020154611e1c908790600160c01b90046001600160401b0316612ce3565b6002830154611e3491906001600160401b0316613e32565b826001016000828254611e479190613e73565b90915550611fdf9050565b6004816004811115611e6657611e66613971565b03611fd3576040805160a0808201835285546001600160a01b03168252825160e08101845260018701548152600287015460208281019190915260038801548286015260048801546001600160401b038082166060850152600160401b820481166080850152600160801b8204811694840194909452600160c01b900490921660c08201529082015281518083018352600586018054611fc994889390850192909182908290611f1590613ec2565b80601f0160208091040260200160405190810160405280929190818152602001828054611f4190613ec2565b8015611f8e5780601f10611f6357610100808354040283529160200191611f8e565b820191906000526020600020905b815481529060010190602001808311611f7157829003601f168201915b50505091835250506001919091015460209182015290825260078301546001600160401b031690820152600890910154604090910152612fba565b6001830155611fdf565b815460ff191660031782555b8254611ff4906001600160a01b0316876130e8565b60018201546014805482919060009061200e908490613e73565b909155505060405163a9059cbb60e01b81526001600160a01b038781166004830152602482018390527f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af1158015612082573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120a69190613e86565b6120c357604051637c2ccffd60e11b815260040160405180910390fd5b5050600060019091015550505050565b600033816120e18585612c5d565b905060006120ee82611b71565b9050600081600681111561210457612104613971565b14806121215750600681600681111561211f5761211f613971565b145b801561214a5750600154600083815260208190526040902060ff9091169061214890612cb7565b105b801561216b575060008281526020819052604090206121699084612cc1565b155b9695505050505050565b81600161218182611b71565b600681111561219257612192613971565b146121b05760405163ae9dcffd60e01b815260040160405180910390fd5b610961838361310a565b6000828152601260209081526040808320600101548084526010909252909120546001600160a01b031661220157604051635eeb253d60e11b815260040160405180910390fd5b600083815260126020526040902060048101546001600160a01b03163314612255576040517fce351b9400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001810154600090815260106020526040808220815160038082526080820190935290929181602001602082028036833701905050905061229d61229887611066565b6132a7565b816000815181106122b0576122b06145b7565b602090810291909101015260068201546122c9906132b8565b816001815181106122dc576122dc6145b7565b6020026020010181815250508260020160089054906101000a90046001600160401b03166001600160401b03168160028151811061231c5761231c6145b7565b60200260200101818152505061088d8686836132c4565b6123a86040805160a080820183526000808352835160e081018552818152602080820183905281860183905260608083018490526080830184905293820183905260c0820183905280850191909152845180860186529283528201529091820190815260006020820181905260409091015290565b60008281526010602052604090205482906001600160a01b03166123df57604051635eeb253d60e11b815260040160405180910390fd5b600083815260106020908152604091829020825160a0808201855282546001600160a01b03168252845160e0810186526001840154815260028401548186015260038401548187015260048401546001600160401b038082166060840152600160401b820481166080840152600160801b8204811693830193909352600160c01b900490911660c0820152928101929092528251808401845260058201805493949293928501928290829061249390613ec2565b80601f01602080910402602001604051908101604052809291908181526020018280546124bf90613ec2565b801561250c5780601f106124e15761010080835404028352916020019161250c565b820191906000526020600020905b8154815290600101906020018083116124ef57829003601f168201915b50505091835250506001919091015460209182015290825260078301546001600160401b0316908201526008909101546040909101529392505050565b60008282188284100282186105d8565b60008481526010602052604090205484906001600160a01b031661259057604051635eeb253d60e11b815260040160405180910390fd5b600085815260116020908152604080832060108352818420815460ff191660031782558885526012909352922081546125d2906001600160a01b0316896130e8565b60048101546125ea906001600160a01b0316886129eb565b6002810154600090612606908a906001600160401b0316612ce3565b60038301549091506126188183613e73565b6014805460009061262a908490613e73565b90915550508254600490849060ff1916600183021790555060405163a9059cbb60e01b81526001600160a01b038981166004830152602482018490527f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af11580156126b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126d59190613e86565b6126f257604051637c2ccffd60e11b815260040160405180910390fd5b60405163a9059cbb60e01b81526001600160a01b038881166004830152602482018390527f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af1158015612761573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127859190613e86565b610e0c57604051637c2ccffd60e11b815260040160405180910390fd5b60008481526010602052604090205484906001600160a01b03166127d957604051635eeb253d60e11b815260040160405180910390fd5b600084815260126020526040902060048101546127ff906001600160a01b0316866129eb565b60028101546000906128459088906001600160401b0316612840826000908152601160205260409020600201546001600160401b03600160c01b9091041690565b613462565b60038301549091506128578183613e73565b60148054600090612869908490613e73565b90915550508254600490849060ff1916600183021790555060405163a9059cbb60e01b81526001600160a01b038781166004830152602482018490527f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af11580156128f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129149190613e86565b61293157604051637c2ccffd60e11b815260040160405180910390fd5b60405163a9059cbb60e01b81526001600160a01b038681166004830152602482018390527f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af11580156129a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129c49190613e86565b6129e157604051637c2ccffd60e11b815260040160405180910390fd5b5050505050505050565b6001600160a01b0382166000908152600a602052604090206109619082613541565b60008181526012602090815260408083206001810154808552601190935292206002830154612a469083906001600160401b0316612ce3565b816001016000828254612a599190613e73565b90915550506004830154612a76906001600160a01b0316856129eb565b6000848152602081905260409020612a8d9061354d565b825460ff191660061783556002808401805467ffffffffffffffff1916905560006003850181905560048501805473ffffffffffffffffffffffffffffffffffffffff19169055908201805460019290612af19084906001600160401b03166145cd565b82546101009290920a6001600160401b038181021990931691831602179091556002850154604051600160401b90910490911681528391507f33ba8f7627565d89f7ada2a6b81ea532b7aa9b11e91a78312d6e1fca0bfcd1dc9060200160405180910390a26000848152600660205260409020805467ffffffffffffffff19169055600082815260106020526040812060028301546004820154919291612ba4916001600160401b0390811691166145cd565b60048301546001600160401b039182169250600160c01b90041681118015612be157506001835460ff166004811115612bdf57612bdf613971565b145b1561088d57825460ff19166004178355612bfc6001426145cd565b6002840180546001600160401b0392909216600160801b0267ffffffffffffffff60801b1990921691909117905560405184907f4769361a442504ecaf038f35e119bcccdd5e42096b24c09e3c17fd17c6684c0290600090a2505050505050565b60008282604051602001612c849291909182526001600160401b0316602082015260400190565b60405160208183030381529060405280519060200120905092915050565b60006105d8836001600160a01b038416613556565b6000611079825490565b6001600160a01b038116600090815260018301602052604081205415156105d8565b6000828152601160205260408120600201546105d89084908490600160801b90046001600160401b0316613462565b600081608001516001600160401b031682604001516110799190613e32565b6040517f23b872dd0000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152306024830181905260448301849052917f0000000000000000000000000000000000000000000000000000000000000000909116906323b872dd906064016020604051808303816000875af1158015612dc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612de89190613e86565b61096157604051637c2ccffd60e11b815260040160405180910390fd5b6001600160a01b0382166000908152600a6020526040902061096190826135a5565b612e31828261310a565b60008281526008602090815260408083206001600160401b038086168552908352818420805460ff1916600190811790915586855260069093529083208054929390929091612e8291859116613e00565b92506101000a8154816001600160401b0302191690836001600160401b031602179055505050565b6000611113426135b1565b60006105d8612ec48484612ec9565b6135dd565b600080612ed8610100436145ec565b60025490915060009061010090612f079071010000000000000000000000000000000000900460ff1686614600565b612f119190614622565b6001600160401b031690506000612f2a610100876145ec565b9050600061010082612f3c8587613e73565b612f469190613e73565b612f5091906145ec565b979650505050505050565b606060006105d883613637565b600081604051602001612f7b9190613dd7565b604051602081830303815290604052805190602001209050919050565b6001600160a01b038216600090815260096020526040902061096190826135a5565b6000612fc98260200151613693565b602083015160a0810151606090910151612fe39190614600565b6001600160401b03166110799190613e32565b600080600061300485611b71565b60008681526005602052604081205491925090613029906001600160401b03166135b1565b9050600182600681111561303f5761303f613971565b141580613053575061305185826136b2565b155b15613066576000809350935050506130a7565b6130708686612ec9565b9250600061307d846135dd565b9050600061308a88611092565b90508015806130a0575061309e81836145ec565b155b9550505050505b9250929050565b60008060006130bd8585612ff6565b90925090508180156130df575060025460ff600160801b909104811690821610155b95945050505050565b6001600160a01b03821660009081526009602052604090206109619082613541565b6000613115826136c8565b6001600160401b03169050428110613159576040517f6b4b1a4e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60025461317690600160401b90046001600160401b031682613e73565b42106131ae576040517fde55698e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008381526007602090815260408083206001600160401b038616845290915290205460ff161561320a576040517efab7d900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61321483836130ae565b61324a576040517fd3ffa66b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008381526008602090815260408083206001600160401b038616845290915290205460ff1615610961576040517f98e7e55100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060ff198216816110e9826136db565b6000806105d8836136db565b6000838152600760205260408120906132db612eaa565b6001600160401b0316815260208101919091526040016000205460ff161561332f576040517f3edef7db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600480546040517f94c8919d0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116916394c8919d91613379918691869101614650565b602060405180830381865afa158015613396573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133ba9190613e86565b6133f0576040517ffcd03a4700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000838152600760205260408120600191613409612eaa565b6001600160401b031681526020808201929092526040908101600020805460ff19169315159390931790925590518481527f3b989d183b84b02259d7c14b34a9c9eb0fccb4c355a920d25e581e25aef4993d91016117f4565b60008381526010602052604081206001600160401b03808416908516106134b5576040517f56607cb000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160e081018252600183015481526002830154602082015260038301549181019190915260048201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c082015261352490613693565b61352e85856145cd565b6001600160401b03166130df9190613e32565b60006105d8838361374d565b61129981613847565b600081815260018301602052604081205461359d57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155611079565b506000611079565b60006105d88383613556565b60006110797f0000000000000000000000000000000000000000000000000000000000000000836146fa565b60008060ff83166135ef600143613e1f565b6135f99190613e1f565b409050600081900361360d5761360d614728565b60408051602081018390520160405160208183030381529060405280519060200120915050919050565b60608160000180548060200260200160405190810160405280929190818152602001828054801561368757602002820191906000526020600020905b815481526020019060010190808311613673575b50505050509050919050565b600081608001516001600160401b031682602001516110799190613e32565b60006001600160401b03808416908316106105d8565b60006110796136d6836138a9565b6138b6565b7fff00000000000000000000000000000000000000000000000000000000000000811660015b60208110156106fc57600891821c9161371b908290613e32565b83901b7fff00000000000000000000000000000000000000000000000000000000000000169190911790600101613701565b60008181526001830160205260408120548015613836576000613771600183613e1f565b855490915060009061378590600190613e1f565b90508082146137ea5760008660000182815481106137a5576137a56145b7565b90600052602060002001549050808760000184815481106137c8576137c86145b7565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806137fb576137fb61473e565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050611079565b6000915050611079565b5092915050565b6000613851825490565b905060005b818110156138a157826001016000846000018381548110613879576138796145b7565b9060005260206000200154815260200190815260200160002060009055806001019050613856565b505060009055565b6000611079826001613e00565b60006110797f000000000000000000000000000000000000000000000000000000000000000083614600565b60408051610100810182526000608080830182815260a080850184905260c0850184905260e08501849052908452845190810185528281526020808201849052818601849052606080830185905292820192909252818401528351908101845290815290918201905b8152600060209091015290565b60006020828403121561396a57600080fd5b5035919050565b634e487b7160e01b600052602160045260246000fd5b602081016005831061399b5761399b613971565b91905290565b6001600160a01b038116811461129957600080fd5b6000806000606084860312156139cb57600080fd5b8335925060208401356139dd816139a1565b915060408401356139ed816139a1565b809150509250925092565b6001600160401b038116811461129957600080fd5b8035613a18816139f8565b919050565b60008060408385031215613a3057600080fd5b823591506020830135613a42816139f8565b809150509250929050565b600061010082840312156106fc57600080fd5b60008060006101408486031215613a7657600080fd5b833592506020840135613a88816139f8565b9150613a978560408601613a4d565b90509250925092565b602080825282518282018190526000918401906040840190835b81811015613ad8578351835260209384019390920191600101613aba565b509095945050505050565b6000815180845260005b81811015613b0957602081850181015186830182015201613aed565b506000602082860101526020601f19601f83011685010191505092915050565b6001600160401b0381511682526001600160401b03602082015116602083015260ff604082015116604083015260ff60608201511660608301526000608082015160a060808501526110e960a0850182613ae3565b602081526000825160ff815116602084015260ff602082015116604084015260ff604082015116606084015260ff606082015116608084015250602083015160e060a0840152613bd2610100840182613b29565b90506040840151613be960c08501825160ff169052565b5060608401516001600160401b03811660e0850152509392505050565b600060208284031215613c1857600080fd5b81356001600160401b03811115613c2e57600080fd5b820161016081850312156105d857600080fd5b6000815160408452613c566040850182613ae3565b602093840151949093019390935250919050565b6001600160a01b038151168252600060208201518051602085015260208101516040850152604081015160608501526001600160401b0360608201511660808501526001600160401b0360808201511660a08501526001600160401b0360a08201511660c08501526001600160401b0360c08201511660e0850152506040820151610160610100850152613d02610160850182613c41565b90506060830151613d1f6101208601826001600160401b03169052565b5060808301516101408501528091505092915050565b602081526000825160406020840152613d516060840182613c6a565b90506001600160401b0360208501511660408401528091505092915050565b602081016007831061399b5761399b613971565b60008060408385031215613d9757600080fd5b823591506020830135613a42816139a1565b6000806101208385031215613dbd57600080fd5b82359150613dce8460208501613a4d565b90509250929050565b6020815260006105d86020830184613c6a565b634e487b7160e01b600052601160045260246000fd5b6001600160401b03818116838216019081111561107957611079613dea565b8181038181111561107957611079613dea565b808202811582820484141761107957611079613dea565b634e487b7160e01b600052601260045260246000fd5b600082613e6e57613e6e613e49565b500490565b8082018082111561107957611079613dea565b600060208284031215613e9857600080fd5b815180151581146105d857600080fd5b61ffff828116828216039081111561107957611079613dea565b600181811c90821680613ed657607f821691505b6020821081036106fc57634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715613f2e57613f2e613ef6565b60405290565b60405160a081016001600160401b0381118282101715613f2e57613f2e613ef6565b60405160e081016001600160401b0381118282101715613f2e57613f2e613ef6565b604051601f8201601f191681016001600160401b0381118282101715613fa057613fa0613ef6565b604052919050565b600060408284031215613fba57600080fd5b613fc2613f0c565b905081356001600160401b03811115613fda57600080fd5b8201601f81018413613feb57600080fd5b80356001600160401b0381111561400457614004613ef6565b614017601f8201601f1916602001613f78565b81815285602083850101111561402c57600080fd5b81602084016020830137600060209282018301528352928301359282019290925292915050565b600081360361016081121561406757600080fd5b61406f613f34565b833561407a816139a1565b815260e0601f198301121561408e57600080fd5b614096613f56565b602085810135825260408087013591830191909152606086013590820152915060808401356140c4816139f8565b606083015260a08401356140d7816139f8565b608083015260c08401356140ea816139f8565b60a083015260e08401356140fd816139f8565b60c08301526020810191909152610100830135906001600160401b0382111561412557600080fd5b61413136838601613fa8565b60408201526141436101208501613a0d565b6060820152610140939093013560808401525090919050565b60006020828403121561416e57600080fd5b81356105d8816139a1565b60006020828403121561418b57600080fd5b81356105d8816139f8565b60008235603e198336030181126141ac57600080fd5b9190910192915050565b6000808335601e198436030181126141cd57600080fd5b8301803591506001600160401b038211156141e757600080fd5b6020019150368190038213156130a757600080fd5b60008135611079816139f8565b601f82111561096157806000526020600020601f840160051c810160208510156142305750805b601f840160051c820191505b81811015614250576000815560010161423c565b5050505050565b8135601e1983360301811261426b57600080fd5b820180356001600160401b038111801561428457600080fd5b81360360208401131561429657600080fd5b600090506142ae826142a88654613ec2565b86614209565b80601f8311600181146142e3578284156142cb5750848201602001355b600019600386901b1c1916600185901b178655614342565b600086815260209020601f19851690845b82811015614316576020858901810135835594850194600190920191016142f4565b50858210156143365760001960f88760031b161c19602085890101351681555b505060018460011b0186555b505050505060209190910135600190910155565b8135614361816139a1565b815473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03919091161781556020820135600182015560408201356002820155606082013560038201556004810160808301356143b9816139f8565b815467ffffffffffffffff19166001600160401b0382161782555060a08301356143e2816139f8565b81546fffffffffffffffff0000000000000000191660409190911b6fffffffffffffffff00000000000000001617815561445661442160c085016141fc565b825467ffffffffffffffff60801b191660809190911b77ffffffffffffffff0000000000000000000000000000000016178255565b6144ae61446560e085016141fc565b825477ffffffffffffffffffffffffffffffffffffffffffffffff1660c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016178255565b506144c96144c0610100840184614196565b60058301614257565b6144fa6144d961012084016141fc565b600783016001600160401b0382166001600160401b03198254161781555050565b6101409190910135600890910155565b8381528235602080830191909152830135604080830191909152830135606080830191909152610120820190840135614542816139f8565b6001600160401b0381166080840152506080840135614560816139f8565b6001600160401b03811660a08401525060a084013561457e816139f8565b6001600160401b03811660c08401525061459a60c08501613a0d565b6001600160401b0390811660e084015283166101008301526110e9565b634e487b7160e01b600052603260045260246000fd5b6001600160401b03828116828216039081111561107957611079613dea565b6000826145fb576145fb613e49565b500690565b6001600160401b03818116838216029081169081811461384057613840613dea565b60006001600160401b0383168061463b5761463b613e49565b806001600160401b0384160691505092915050565b82358152602080840135908201526000610120820161467f604084016040870180358252602090810135910152565b614699608084016080870180358252602090810135910152565b6146b360c0840160c0870180358252602090810135910152565b610120610100840152835190819052602084019061014084019060005b818110156146ee5783518352602093840193909201916001016146d0565b50909695505050505050565b60006001600160401b0383168061471357614713613e49565b806001600160401b0384160491505092915050565b634e487b7160e01b600052600160045260246000fd5b634e487b7160e01b600052603160045260246000fdfea26469706673582212208753932439ab3be782432684ba36d249b5e5029b7c1b55364b935c22d15237d664736f6c634300081c0033"; public MarketplaceDeploymentBase() : base(BYTECODE) { } public MarketplaceDeploymentBase(string byteCode) : base(byteCode) { } [Parameter("tuple", "config", 1)] @@ -284,6 +284,17 @@ namespace CodexContractsPlugin.Marketplace public class SlotreservationsReservationnotallowedErrorBase : IErrorDTO { } + + public partial class CanMarkProofAsMissingFunction : CanMarkProofAsMissingFunctionBase { } + + [Function("canMarkProofAsMissing")] + public class CanMarkProofAsMissingFunctionBase : FunctionMessage + { + [Parameter("bytes32", "slotId", 1)] + public virtual byte[] SlotId { get; set; } + [Parameter("uint64", "period", 2)] + public virtual ulong Period { get; set; } + } public partial class CanReserveSlotOutputDTO : CanReserveSlotOutputDTOBase { } [FunctionOutput] diff --git a/ProjectPlugins/CodexPlugin/CodexDockerImage.cs b/ProjectPlugins/CodexPlugin/CodexDockerImage.cs index 57619f0b..805b3af0 100644 --- a/ProjectPlugins/CodexPlugin/CodexDockerImage.cs +++ b/ProjectPlugins/CodexPlugin/CodexDockerImage.cs @@ -2,7 +2,7 @@ { public class CodexDockerImage { - private const string DefaultDockerImage = "codexstorage/nim-codex:0.2.3-dist-tests"; + private const string DefaultDockerImage = "codexstorage/nim-codex:sha-2e1306a-dist-tests"; public static string Override { get; set; } = string.Empty; diff --git a/Tests/CodexReleaseTests/MarketTests/FailTest.cs b/Tests/CodexReleaseTests/MarketTests/FailTest.cs index c5a0715c..cbd39600 100644 --- a/Tests/CodexReleaseTests/MarketTests/FailTest.cs +++ b/Tests/CodexReleaseTests/MarketTests/FailTest.cs @@ -8,11 +8,16 @@ namespace CodexReleaseTests.MarketTests public class FailTest : MarketplaceAutoBootstrapDistTest { protected override int NumberOfHosts => 4; + private readonly int SlotTolerance; protected override int NumberOfClients => 1; protected override ByteSize HostAvailabilitySize => 1.GB(); protected override TimeSpan HostAvailabilityMaxDuration => TimeSpan.FromDays(1.0); - [Ignore("Slots are never freed because proofs are never marked as missing. Issue: https://github.com/codex-storage/nim-codex/issues/1153")] + public FailTest() + { + SlotTolerance = NumberOfHosts / 2; + } + [Test] [Combinatorial] public void Fail( @@ -50,7 +55,8 @@ namespace CodexReleaseTests.MarketTests { var events = GetContracts().GetEvents(GetTestRunTimeRange()); var slotFreed = events.GetSlotFreedEvents(); - if (slotFreed.Length == NumberOfHosts) + Log($"SlotFreed events: {slotFreed.Length} - Expected: {SlotTolerance}"); + if (slotFreed.Length > SlotTolerance) { Log($"{nameof(WaitForSlotFreedEvents)} took {Time.FormatDuration(DateTime.UtcNow - start)}"); return; @@ -68,7 +74,7 @@ namespace CodexReleaseTests.MarketTests Duration = HostAvailabilityMaxDuration / 2, Expiry = TimeSpan.FromMinutes(5.0), MinRequiredNumberOfNodes = (uint)NumberOfHosts, - NodeFailureTolerance = (uint)(NumberOfHosts / 2), + NodeFailureTolerance = (uint)SlotTolerance, PricePerBytePerSecond = 100.TstWei(), ProofProbability = 1, // Require a proof every period CollateralPerByte = 1.TstWei()