0x608060405234801561001057600080fd5b50614a12806100206000396000f3fe60806040526004361061002d5760003560e01c80631e281170146102d6578063f04f2707146102f857610034565b3661003457005b34801561004057600080fd5b50600036606060a160e01b6001600160e01b031984351614156100ae576100a9600061006f8460048188614970565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061031892505050565b6102cb565b605160e11b6001600160e01b0319600035161415610112576100a960006100d88460048188614970565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061036492505050565b60a360e01b6001600160e01b031960003516141561013c576100a9600161006f8460048188614970565b602960e21b6001600160e01b0319600035161415610166576100a960016100d88460048188614970565b631644ac7b60e11b6001600160e01b031960003516148061019957506323a69e7560e01b6001600160e01b031960003516145b806101b6575063654b648760e01b6001600160e01b031960003516145b806101d35750637d241f3960e11b6001600160e01b031960003516145b806101f0575063fa461e3360e01b6001600160e01b031960003516145b8061020d575063a1dab4eb60e01b6001600160e01b031960003516145b8061022a575063061e01a160e21b6001600160e01b031960003516145b8061024757506334f870a160e21b6001600160e01b031960003516145b1561027b57600061025b8360048187614970565b8101906102689190613f05565b9250505061027581610384565b506102cb565b600061028a8360048187614970565b8101906102979190613bd8565b93505050506000806000838060200190518101906102b59190613b47565b9250925092506102c68383836103ce565b505050505b915050805190602001f35b3480156102e257600080fd5b506102f66102f1366004613ea8565b610f37565b005b34801561030457600080fd5b506102f6610313366004613cf9565b610fb9565b600061032382610fec565b80519091506001600160a01b03166103545761033e8161132e565b6001600160701b03168082526103545750610360565b61035e81846115b1565b505b5050565b600061036f82610fec565b905061037a8161177a565b6103545750610360565b60008060008380602001905181019061039d9190613b47565b9250925092508051600014156103bd576103b8833384612943565b6103c8565b6103c88383836103ce565b50505050565b6000818060200190518101906103e49190613f52565b9050806060015181610100015160ff16815181106103fe57fe5b60200260200101516001600160a01b03166370a08231306040518263ffffffff1660e01b815260040161043191906142ee565b60206040518083038186803b15801561044957600080fd5b505afa15801561045d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104819190613e90565b61010082015190935060ff165b816040015151811015610ec05760006104c785846080015184815181106104b157fe5b602002602001015162ffffff16620f4240612a29565b905060008360e0015183815181106104db57fe5b602002602001015160ff166001146104f45760006104f7565b60015b90508360c00151838151811061050957fe5b602002602001015160ff1660011415610716576000808560400151858151811061052f57fe5b60200260200101516001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401604080518083038186803b15801561056e57600080fd5b505afa158015610582573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105a691906140a7565b6001600160701b031691506001600160701b03169150826105c85780826105cb565b81815b809250819350505060006105fc8383878a60a001518a815181106105eb57fe5b6020026020010151620f4240612ad9565b90506000808561060e57826000610612565b6000835b9150915061064f8960600151898151811061062957fe5b60200260200101518a604001518a8151811061064157fe5b60200260200101518d612943565b8860400151888151811061065f57fe5b60200260200101516001600160a01b031663022c0d9f83833060006001600160401b038111801561068f57600080fd5b506040519080825280601f01601f1916602001820160405280156106ba576020820181803683370190505b506040518563ffffffff1660e01b81526004016106da9493929190614897565b600060405180830381600087803b1580156106f457600080fd5b505af1158015610708573d6000803e3d6000fd5b505050505050505050610e1e565b8360c00151838151811061072657fe5b602002602001015160ff166002148061075957508360c00151838151811061074a57fe5b602002602001015160ff166003145b156108a85760008460600151848151811061077057fe5b60200260200101518760006001600160401b038111801561079057600080fd5b506040519080825280601f01601f1916602001820160405280156107bb576020820181803683370190505b506040516020016107ce93929190614448565b6040516020818303038152906040529050846040015184815181106107ef57fe5b60200260200101516001600160a01b031663128acb08308486866108275773fffd8963efd1fc6a506488495d951d5263988d2561082e565b6401000276a45b866040518663ffffffff1660e01b815260040161084f95949392919061439d565b6040805180830381600087803b15801561086857600080fd5b505af115801561087c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108a09190613ee2565b505050610e1e565b8360c0015183815181106108b857fe5b602002602001015160ff16600414806108eb57508360c0015183815181106108dc57fe5b602002602001015160ff166005145b15610b8d5760008460400151848151811061090257fe5b60200260200101516001600160a01b0316638d928af86040518163ffffffff1660e01b815260040160206040518083038186803b15801561094257600080fd5b505afa158015610956573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061097a9190613b2b565b905061099e8560600151858151811061098f57fe5b60200260200101518289612b0d565b806001600160a01b03166352bbbe296040518060c00160405280886040015188815181106109c857fe5b60200260200101516001600160a01b03166338fff2d06040518163ffffffff1660e01b815260040160206040518083038186803b158015610a0857600080fd5b505afa158015610a1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a409190613e90565b8152602001600060ff16815260200188606001518881518110610a5f57fe5b60200260200101516001600160a01b0316815260200188606001518860010181518110610a8857fe5b60200260200101516001600160a01b0316815260200186815260200160006001600160401b0381118015610abb57600080fd5b506040519080825280601f01601f191660200182016040528015610ae6576020820181803683370190505b509052604080516080810182523080825260006020830181905282840191909152606082015290516001600160e01b031960e085901b168152610b34929190600190600019906004016147fa565b602060405180830381600087803b158015610b4e57600080fd5b505af1158015610b62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b869190613e90565b5050610e1e565b8360c001518381518110610b9d57fe5b602002602001015160ff1660061415610d1957610be984606001518481518110610bc357fe5b602002602001015185604001518581518110610bdb57fe5b602002602001015188612b0d565b60408051600280825260608201835260009260208301908036833701905050905084606001518481518110610c1a57fe5b602002602001015181600081518110610c2f57fe5b60200260200101906001600160a01b031690816001600160a01b03168152505084606001518460010181518110610c6257fe5b602002602001015181600181518110610c7757fe5b60200260200101906001600160a01b031690816001600160a01b03168152505084604001518481518110610ca757fe5b60200260200101516001600160a01b0316636023e96682856000306040518563ffffffff1660e01b8152600401610ce1949392919061446f565b600060405180830381600087803b158015610cfb57600080fd5b505af1158015610d0f573d6000803e3d6000fd5b5050505050610e1e565b8360c001518381518110610d2957fe5b602002602001015160ff1660071415610e1e57610d4f84606001518481518110610bc357fe5b83604001518381518110610d5f57fe5b60200260200101516001600160a01b03166377adb3f060048660e001518681518110610d8757fe5b602002602001015160ff16901c60ff168660e001518681518110610da757fe5b602090810291909101810151604080516000808252938101918290526001600160e01b031960e087901b16909152610deb9392600f909216918891602481016148e4565b600060405180830381600087803b158015610e0557600080fd5b505af1158015610e19573d6000803e3d6000fd5b505050505b83606001518360010181518110610e3157fe5b60200260200101516001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401610e6491906142ee565b60206040518083038186803b158015610e7c57600080fd5b505afa158015610e90573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eb49190613e90565b9550505060010161048e565b506000610efb82600001516001600160a01b0316620f42408460800151600081518110610ee957fe5b602002602001015162ffffff16612a29565b9050808411610f255760405162461bcd60e51b8152600401610f1c906145b5565b60405180910390fd5b610f30853383612943565b5050505050565b600080306001600160a01b031683604051610f5291906142d2565b6000604051808303816000865af19150503d8060008114610f8f576040519150601f19603f3d011682016040523d82523d6000602084013e610f94565b606091505b50915091508181906103c85760405162461bcd60e51b8152600401610f1c919061456b565b600080600083806020019051810190610fd29190613b47565b925092509250610fe38383836103ce565b50505050505050565b610ff461385d565b60008061100084612bf3565b9150915060008160ff166001600160401b038111801561101f57600080fd5b50604051908082528060200260200182016040528015611049578160200160208202803683370190505b50905060008260010160ff166001600160401b038111801561106a57600080fd5b50604051908082528060200260200182016040528015611094578160200160208202803683370190505b50905060008360ff166001600160401b03811180156110b257600080fd5b506040519080825280602002602001820160405280156110dc578160200160208202803683370190505b50905060008460ff166001600160401b03811180156110fa57600080fd5b50604051908082528060200260200182016040528015611124578160200160208202803683370190505b50905060008560ff166001600160401b038111801561114257600080fd5b5060405190808252806020026020018201604052801561116c578160200160208202803683370190505b50905060008660ff166001600160401b038111801561118a57600080fd5b506040519080825280602002602001820160405280156111b4578160200160208202803683370190505b50905087856000815181106111c557fe5b6001600160a01b0390921660209283029190910190910152601560005b8860ff168110156112ac576111f78c83612c08565b8d878151811061120357fe5b602002602001018d886001018151811061121957fe5b602002602001018d898151811061122c57fe5b602002602001018d8a8151811061123f57fe5b602002602001018d8b8151811061125257fe5b602002602001018d8c8151811061126557fe5b60ff97881660209182029290920101529590941690945262ffffff9485169092529390921690526001600160a01b03928316905291169052603091909101906001016111e2565b5060008060006112bc8e85612c3e565b925092509250604051806101200160405280846001600160a01b03168152602001836001600160a01b031681526020018b81526020018a81526020018881526020018981526020018681526020018781526020018260010360ff168152509c505050505050505050505050505b919050565b6000808060015b8460400151518110156114955760008060006113778860a00151858151811061135a57fe5b602002602001015162ffffff16896080015186815181106104b157fe5b90508360011415611400576113f68860c00151600186038151811061139857fe5b6020026020010151896040015160018703815181106113b357fe5b60200260200101518a6060015160018803815181106113ce57fe5b60200260200101518b60e0015160018903815181106113e957fe5b6020026020010151612c5e565b9093509150611407565b8592508491505b6000806114658a60c00151878151811061141d57fe5b60200260200101518b60400151888151811061143557fe5b60200260200101518c60600151898151811061144d57fe5b60200260200101518d60e001518a815181106113e957fe5b9150915061147f858584848762ffffff16620f4240613027565b9098509650506001909401935061133592505050565b508082106114a857600092505050611329565b60006114dc8560a001516000815181106114be57fe5b602002602001015162ffffff1686608001516000815181106104b157fe5b90506000611506611501620f42406114fb62ffffff861681898961308e565b9061308e565b6130d1565b9050600061151785620f424061308e565b905080821161152e57600095505050505050611329565b600061154962ffffff85166115438585613122565b9061314a565b9050600061157c611569846115638562ffffff8a1661308e565b9061317f565b61154362ffffff88166114fb8a8761308e565b90508189602001516001600160a01b0316018110156115a5576000975050505050505050611329565b50979650505050505050565b6115ca8283600001516001600160a01b031660006131a4565b600082606001516000815181106115dd57fe5b60200260200101516001600160a01b03166370a08231306040518263ffffffff1660e01b815260040161161091906142ee565b60206040518083038186803b15801561162857600080fd5b505afa15801561163c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116609190613e90565b9050811561174357611674838260016131a4565b61173e836060015160018151811061168857fe5b602002602001015173bcce08c0e9293e103010e51f82b23a1f3edfb31585606001516001815181106116b657fe5b60200260200101516001600160a01b03166370a08231306040518263ffffffff1660e01b81526004016116e991906142ee565b60206040518083038186803b15801561170157600080fd5b505afa158015611715573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117399190613e90565b612943565b61035e565b61035e836060015160008151811061175757fe5b602002602001015173bcce08c0e9293e103010e51f82b23a1f3edfb31583612943565b6000808260400151516001016001600160401b038111801561179b57600080fd5b506040519080825280602002602001820160405280156117c5578160200160208202803683370190505b50905082600001516001600160a01b0316816000815181106117e357fe5b60200260200101818152505060005b8360400151518160ff1610156128c0576000611831838360ff168151811061181657fe5b602002602001015186608001518460ff16815181106104b157fe5b90508460c001518260ff168151811061184657fe5b602002602001015160ff1660011415611a095760008086604001518460ff168151811061186f57fe5b60200260200101516001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401604080518083038186803b1580156118ae57600080fd5b505afa1580156118c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118e691906140a7565b6001600160701b031691506001600160701b0316915086606001518460ff168151811061190f57fe5b60200260200101516001600160a01b031687604001518560ff168151811061193357fe5b60200260200101516001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561197357600080fd5b505afa158015611987573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119ab9190613b2b565b6001600160a01b0316146119c05780826119c3565b81815b80925081935050506119e48282858a60a001518860ff16815181106105eb57fe5b858560010160ff16815181106119f657fe5b60200260200101818152505050506128b7565b8460c001518260ff1681518110611a1c57fe5b602002602001015160ff1660041480611a5257508460c001518260ff1681518110611a4357fe5b602002602001015160ff166005145b15611d5257600085604001518360ff1681518110611a6c57fe5b60200260200101516001600160a01b03166338fff2d06040518163ffffffff1660e01b815260040160206040518083038186803b158015611aac57600080fd5b505afa158015611ac0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ae49190613e90565b604051631f29a8cd60e31b815290915060009073ba12222222228d8ba445958a75a0704d566bf2c89063f94d466890611b219085906004016144a7565b60006040518083038186803b158015611b3957600080fd5b505afa158015611b4d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611b759190810190613c38565b505060408051600180825281830190925291925060009190816020015b611b9a6138be565b815260200190600190039081611b925790505090506040518060a0016040528084815260200160048a60e001518860ff1681518110611bd557fe5b602002602001015160ff16901c60ff1681526020018960e001518760ff1681518110611bfd57fe5b602090810291909101810151600f16825281810187905260408051600080825292810182529201919091528251839190611c3357fe5b6020908102919091018101919091526040805160808101825230808252600093820184905281830152606081018390529051637c26833760e11b8152909173ba12222222228d8ba445958a75a0704d566bf2c89163f84d066e91611c9f918690889087906004016144b0565b600060405180830381600087803b158015611cb957600080fd5b505af1158015611ccd573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611cf59190810190613df3565b8960e001518760ff1681518110611d0857fe5b6020026020010151600f1660ff1681518110611d2057fe5b6020026020010151600003878760010160ff1681518110611d3d57fe5b602002602001018181525050505050506128b7565b8460c001518260ff1681518110611d6557fe5b602002602001015160ff166006141561254e57600085604001518360ff1681518110611d8d57fe5b60200260200101516001600160a01b031663fbfa77cf6040518163ffffffff1660e01b815260040160206040518083038186803b158015611dcd57600080fd5b505afa158015611de1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e059190613b2b565b90506000601287606001518560ff1681518110611e1e57fe5b60200260200101516001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015611e5e57600080fd5b505afa158015611e72573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e96919061419a565b60ff16836001600160a01b03166372912e948a606001518860ff1681518110611ebb57fe5b60200260200101516040518263ffffffff1660e01b8152600401611edf91906142ee565b60206040518083038186803b158015611ef757600080fd5b505afa158015611f0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f2f9190613e90565b0281611f3757fe5b04826001600160a01b031663123645aa89606001518760ff1681518110611f5a57fe5b60200260200101516040518263ffffffff1660e01b8152600401611f7e91906142ee565b60206040518083038186803b158015611f9657600080fd5b505afa158015611faa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fce9190613e90565b03905082811015611fe757600095505050505050611329565b6000826001600160a01b031663741bef1a6040518163ffffffff1660e01b815260040160206040518083038186803b15801561202257600080fd5b505afa158015612036573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061205a9190613b2b565b905087606001518560ff168151811061206f57fe5b60200260200101516001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156120af57600080fd5b505afa1580156120c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120e7919061419a565b601e0360ff16600a0a816001600160a01b0316632fc3a70a8a606001518860010160ff168151811061211557fe5b602002602001015160018060016040518563ffffffff1660e01b815260040161214194939291906143d8565b60206040518083038186803b15801561215957600080fd5b505afa15801561216d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121919190613e90565b8161219857fe5b04620f4240028860a001518660ff16815181106121b157fe5b602002602001015162ffffff1689606001518760010160ff16815181106121d457fe5b60200260200101516001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561221457600080fd5b505afa158015612228573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061224c919061419a565b601e0360ff16600a0a836001600160a01b0316632fc3a70a8c606001518a60ff168151811061227757fe5b602002602001015160006001806040518563ffffffff1660e01b81526004016122a394939291906143d8565b60206040518083038186803b1580156122bb57600080fd5b505afa1580156122cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122f39190613e90565b8702816122fc57fe5b04028161230557fe5b04868660010160ff168151811061231857fe5b6020026020010181815250506000836001600160a01b03166352f55eed8a606001518860010160ff168151811061234b57fe5b60200260200101516040518263ffffffff1660e01b815260040161236f91906142ee565b60206040518083038186803b15801561238757600080fd5b505afa15801561239b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123bf9190613e90565b90506000846001600160a01b031663c3c7b9e98b606001518960010160ff16815181106123e857fe5b60200260200101516040518263ffffffff1660e01b815260040161240c91906142ee565b60206040518083038186803b15801561242457600080fd5b505afa158015612438573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061245c9190613e90565b90506000856001600160a01b0316634a993ee98c606001518a60010160ff168151811061248557fe5b60200260200101516040518263ffffffff1660e01b81526004016124a991906142ee565b60206040518083038186803b1580156124c157600080fd5b505afa1580156124d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124f99190613e90565b905080821015612507578091505b60008284039050898960010160ff168151811061252057fe5b60200260200101518110156125425760009a5050505050505050505050611329565b505050505050506128b7565b8460c001518260ff168151811061256157fe5b602002602001015160ff16600714156126755784604001518260ff168151811061258757fe5b60200260200101516001600160a01b031663580680d860048760e001518560ff16815181106125b257fe5b602002602001015160ff16901c60ff168760e001518560ff16815181106125d557fe5b6020026020010151600f1660ff16846040518463ffffffff1660e01b8152600401612602939291906148ce565b604080518083038186803b15801561261957600080fd5b505afa15801561262d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126519190613ee2565b50838360010160ff168151811061266457fe5b6020026020010181815250506128b7565b6000808660c001518460ff168151811061268b57fe5b602002602001015160ff16600214806126c157508660c001518460ff16815181106126b257fe5b602002602001015160ff166003145b156127eb5786604001518460ff16815181106126d957fe5b60200260200101516001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b15801561271957600080fd5b505afa15801561272d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127519190614100565b5050505060408a015180519394509260ff881692508210905061277057fe5b60200260200101516001600160a01b0316631a6865026040518163ffffffff1660e01b815260040160206040518083038186803b1580156127b057600080fd5b505afa1580156127c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127e891906140d9565b91505b60006127f7828461369a565b9050600061280583856136c8565b90506000808a60e001518860ff168151811061281d57fe5b602002602001015160ff16600114612836578284612839565b83835b915091508a60a001518860ff168151811061285057fe5b602002602001015162ffffff16870282620f42400201818c60a001518a60ff168151811061287a57fe5b602002602001015162ffffff168902028161289157fe5b04898960010160ff16815181106128a457fe5b6020026020010181815250505050505050505b506001016117f2565b5082602001516001600160a01b0316816000815181106128dc57fe5b602002602001015101816001835103815181106128f557fe5b6020026020010151101561290d576000915050611329565b8060008151811061291a57fe5b60200260200101518160018351038151811061293257fe5b602002602001015103915050919050565b600080846001600160a01b031663a9059cbb858560405160240161296892919061442f565b6040516020818303038152906040529060e01b6020820180516001600160e01b0383818316178352505050506040516129a191906142d2565b6000604051808303816000865af19150503d80600081146129de576040519150601f19603f3d011682016040523d82523d6000602084013e6129e3565b606091505b5091509150818015612a0d575080511580612a0d575080806020019051810190612a0d9190613e76565b610f305760405162461bcd60e51b8152600401610f1c906146c1565b6000808060001985870986860292508281109083900303905080612a5f5760008411612a5457600080fd5b508290049050612ad2565b808411612a6b57600080fd5b6000848688096000868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150505b9392505050565b600060018362ffffff1685028362ffffff168802018462ffffff168787020281612aff57fe5b040390505b95945050505050565b600080846001600160a01b031663095ea7b38585604051602401612b3292919061442f565b6040516020818303038152906040529060e01b6020820180516001600160e01b038381831617835250505050604051612b6b91906142d2565b6000604051808303816000865af19150503d8060008114612ba8576040519150601f19603f3d011682016040523d82523d6000602084013e612bad565b606091505b5091509150818015612bd7575080511580612bd7575080806020019051810190612bd79190613e76565b610f305760405162461bcd60e51b8152600401610f1c906145d1565b6001810151602190910151600160601b900491565b0160208101516034820151602b830151602e840151602f850151603090950151600160601b948590049694909304949193909290565b0160018101516021820151603590920151600160601b9081900493920491565b6000806000808760ff1660011415612cf557866001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401604080518083038186803b158015612ca857600080fd5b505afa158015612cbc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ce091906140a7565b6001600160701b039182169350169050612f83565b8760ff1660041415612e5557600073ba12222222228d8ba445958a75a0704d566bf2c86001600160a01b031663f94d4668896001600160a01b03166338fff2d06040518163ffffffff1660e01b815260040160206040518083038186803b158015612d5f57600080fd5b505afa158015612d73573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d979190613e90565b6040518263ffffffff1660e01b8152600401612db391906144a7565b60006040518083038186803b158015612dcb57600080fd5b505afa158015612ddf573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612e079190810190613c38565b509150508060048760ff16901c60ff1681518110612e2157fe5b602002602001015192508086600f1660ff1681518110612e3d57fe5b6020026020010151915082829450945050505061301e565b6000808960ff1660021480612e6d57508960ff166003145b15612f6857886001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b158015612eab57600080fd5b505afa158015612ebf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ee39190614100565b505060408051630d34328160e11b815290519596506001600160a01b038f1695631a6865029550600480830195506020945090925090829003018186803b158015612f2d57600080fd5b505afa158015612f41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f6591906140d9565b91505b612f72818361369a565b9350612f7e81836136c8565b925050505b856001600160a01b0316876001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b158015612fc657600080fd5b505afa158015612fda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ffe9190613b2b565b6001600160a01b031614613013578082613016565b81815b909450925050505b94509492505050565b6000808061305361304561303b8a8861308e565b6115638a8861308e565b611543866114fb8b8e61308e565b9050600061307d6130648a8861308e565b61306e8a8861308e565b01611543886114fb8d8c61308e565b919a91995090975050505050505050565b60008261309d575060006130cb565b828202828482816130aa57fe5b04146130c85760405162461bcd60e51b8152600401610f1c90614680565b90505b92915050565b60006003821115613114575080600160028204015b8181101561310e578091506002818285816130fd57fe5b04018161310657fe5b0490506130e6565b50611329565b811561132957506001919050565b6000828211156131445760405162461bcd60e51b8152600401610f1c90614612565b50900390565b600080821161316b5760405162461bcd60e51b8152600401610f1c90614649565b600082848161317657fe5b04949350505050565b6000828201838110156130c85760405162461bcd60e51b8152600401610f1c9061457e565b60008360e001516000815181106131b757fe5b602002602001015160ff1660011490506000839050606083156132735785606001516000815181106131e557fe5b60200260200101518560006001600160401b038111801561320557600080fd5b506040519080825280601f01601f191660200182016040528015613230576020820181803683370190505b5060405160200161324393929190614448565b6040516020818303038152906040529050600161326b8688608001516000815181106104b157fe5b0391506132d0565b856060015160008151811061328457fe5b602002602001015160008760405160200161329f9190614703565b60408051601f19818403018152908290526132be939291602001614402565b60405160208183030381529060405290505b6000613340838860c001516000815181106132e757fe5b6020026020010151896040015160008151811061330057fe5b60200260200101518a6060015160008151811061331957fe5b60200260200101518b60a0015160008151811061333257fe5b6020026020010151896136eb565b90508660c0015160008151811061335357fe5b602002602001015160ff166001141561345657600080856133765782600061337a565b6000835b9150915086156133d35760408051600080825260208201909252905093506133d389606001516000815181106133ac57fe5b60200260200101518a604001516000815181106133c557fe5b60200260200101518a612943565b88604001516000815181106133e457fe5b60200260200101516001600160a01b031663022c0d9f838330886040518563ffffffff1660e01b815260040161341d9493929190614897565b600060405180830381600087803b15801561343757600080fd5b505af115801561344b573d6000803e3d6000fd5b505050505050610fe3565b8660c0015160008151811061346757fe5b602002602001015160ff166002148061349b57508660c0015160008151811061348c57fe5b602002602001015160ff166003145b156135695786604001516000815181106134b157fe5b60200260200101516001600160a01b031663128acb08308684886134e95773fffd8963efd1fc6a506488495d951d5263988d256134f0565b6401000276a45b876040518663ffffffff1660e01b815260040161351195949392919061439d565b6040805180830381600087803b15801561352a57600080fd5b505af115801561353e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135629190613ee2565b5050610fe3565b8415801561357d575061010087015160ff16155b15610fe3576040805160018082528183019092526000916020808301908036833701905050905087606001516000815181106135b557fe5b6020026020010151816000815181106135ca57fe5b6001600160a01b039290921660209283029190910190910152604080516001808252818301909252600091816020016020820280368337019050509050828160008151811061361557fe5b6020908102919091010152604051632e1c224f60e11b815273ba12222222228d8ba445958a75a0704d566bf2c890635c38449e9061365d903090869086908a90600401614302565b600060405180830381600087803b15801561367757600080fd5b505af115801561368b573d6000803e3d6000fd5b50505050505050505050505050565b60006fffffffffffffffffffffffffffffffff60601b606083901b166001600160a01b038416818161317657fe5b60006130c8826001600160801b0316846001600160a01b0316600160601b612a29565b6000808660ff16600114156137b057600080876001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401604080518083038186803b15801561373557600080fd5b505afa158015613749573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061376d91906140a7565b6001600160701b031691506001600160701b031691508461378f578082613792565b81815b90925090506137a782828c89620f4240612ad9565b92505050613852565b8660ff16600a14806137c557508660ff16600c145b1561384f576040516378a051ad60e11b81526001600160a01b0387169063f140a35a906137f8908b908990600401614880565b60206040518083038186803b15801561381057600080fd5b505afa158015613824573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138489190613e90565b9050613852565b50865b979650505050505050565b60405180610120016040528060006001600160a01b0316815260200160006001600160a01b03168152602001606081526020016060815260200160608152602001606081526020016060815260200160608152602001600060ff1681525090565b6040518060a0016040528060008019168152602001600081526020016000815260200160008152602001606081525090565b600082601f830112613900578081fd5b8151602061391561391083614932565b61490f565b8281528181019085830183850287018401881015613931578586fd5b855b85811015613958578151613946816149c4565b84529284019290840190600101613933565b5090979650505050505050565b600082601f830112613975578081fd5b8151602061398561391083614932565b82815281810190858301838502870184018810156139a1578586fd5b855b8581101561395857815162ffffff811681146139bd578788fd5b845292840192908401906001016139a3565b600082601f8301126139df578081fd5b813560206139ef61391083614932565b8281528181019085830183850287018401881015613a0b578586fd5b855b8581101561395857813584529284019290840190600101613a0d565b600082601f830112613a39578081fd5b81516020613a4961391083614932565b8281528181019085830183850287018401881015613a65578586fd5b855b8581101561395857613a7882613b1a565b84529284019290840190600101613a67565b8051801515811461132957600080fd5b600082601f830112613aaa578081fd5b8135613ab86139108261494f565b818152846020838601011115613acc578283fd5b816020850160208301379081016020019190915292915050565b80516001600160701b038116811461132957600080fd5b8051611329816149c4565b805161ffff8116811461132957600080fd5b805160ff8116811461132957600080fd5b600060208284031215613b3c578081fd5b81516130c8816149c4565b600080600060608486031215613b5b578182fd5b8351613b66816149c4565b6020850151604086015191945092506001600160401b03811115613b88578182fd5b8401601f81018613613b98578182fd5b8051613ba66139108261494f565b818152876020838501011115613bba578384fd5b613bcb826020830160208601614998565b8093505050509250925092565b60008060008060808587031215613bed578182fd5b8435613bf8816149c4565b9350602085013592506040850135915060608501356001600160401b03811115613c20578182fd5b613c2c87828801613a9a565b91505092959194509250565b600080600060608486031215613c4c578081fd5b83516001600160401b0380821115613c62578283fd5b613c6e878388016138f0565b9450602091508186015181811115613c84578384fd5b86019050601f81018713613c96578283fd5b8051613ca461391082614932565b81815283810190838501858402850186018b1015613cc0578687fd5b8694505b83851015613ce2578051835260019490940193918501918501613cc4565b508096505050505050604084015190509250925092565b60008060008060808587031215613d0e578182fd5b84356001600160401b0380821115613d24578384fd5b818701915087601f830112613d37578384fd5b81356020613d4761391083614932565b82815281810190858301838502870184018d1015613d63578889fd5b8896505b84871015613d8e578035613d7a816149c4565b835260019690960195918301918301613d67565b5098505088013592505080821115613da4578384fd5b613db0888389016139cf565b94506040870135915080821115613dc5578384fd5b613dd1888389016139cf565b93506060870135915080821115613de6578283fd5b50613c2c87828801613a9a565b60006020808385031215613e05578182fd5b82516001600160401b03811115613e1a578283fd5b8301601f81018513613e2a578283fd5b8051613e3861391082614932565b8181528381019083850185840285018601891015613e54578687fd5b8694505b838510156115a5578051835260019490940193918501918501613e58565b600060208284031215613e87578081fd5b6130c882613a8a565b600060208284031215613ea1578081fd5b5051919050565b600060208284031215613eb9578081fd5b81356001600160401b03811115613ece578182fd5b613eda84828501613a9a565b949350505050565b60008060408385031215613ef4578182fd5b505080516020909101519092909150565b600080600060608486031215613f19578081fd5b833592506020840135915060408401356001600160401b03811115613f3c578182fd5b613f4886828701613a9a565b9150509250925092565b600060208284031215613f63578081fd5b81516001600160401b0380821115613f79578283fd5b8184019150610120808387031215613f8f578384fd5b613f988161490f565b9050613fa383613afd565b8152613fb160208401613afd565b6020820152604083015182811115613fc7578485fd5b613fd3878286016138f0565b604083015250606083015182811115613fea578485fd5b613ff6878286016138f0565b60608301525060808301518281111561400d578485fd5b61401987828601613965565b60808301525060a083015182811115614030578485fd5b61403c87828601613965565b60a08301525060c083015182811115614053578485fd5b61405f87828601613a29565b60c08301525060e083015182811115614076578485fd5b61408287828601613a29565b60e0830152506101009150614098828401613b1a565b91810191909152949350505050565b600080604083850312156140b9578182fd5b6140c283613ae6565b91506140d060208401613ae6565b90509250929050565b6000602082840312156140ea578081fd5b81516001600160801b03811681146130c8578182fd5b600080600080600080600060e0888a03121561411a578485fd5b8751614125816149c4565b8097505060208801518060020b811461413c578586fd5b955061414a60408901613b08565b945061415860608901613b08565b935061416660808901613b08565b925060a088015163ffffffff8116811461417e578283fd5b915061418c60c08901613a8a565b905092959891949750929550565b6000602082840312156141ab578081fd5b6130c882613b1a565b6000815180845260208085019450808401835b838110156141ec5781516001600160a01b0316875295820195908201906001016141c7565b509495945050505050565b6000815180845260208085019450808401835b838110156141ec57815162ffffff168752958201959082019060010161420a565b6000815180845260208085019450808401835b838110156141ec57815160ff168752958201959082019060010161423e565b60008151808452614275816020860160208601614998565b601f01601f19169290920160200192915050565b80516001600160a01b039081168352602080830151151590840152604080830151909116908301526060908101511515910152565b6001600160a01b03169052565b60ff169052565b600082516142e4818460208701614998565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0385811682526080602080840182905286519184018290526000928782019290919060a0860190855b81811015614350578551851683529483019491830191600101614332565b50508581036040870152875180825290820193509150808701845b838110156143875781518552938201939082019060010161436b565b505050508281036060840152613852818561425d565b6001600160a01b0386811682528515156020830152604082018590528316606082015260a0608082018190526000906138529083018461425d565b6001600160a01b039490941684529115156020840152151560408301521515606082015260800190565b6001600160a01b038416815260ff83166020820152606060408201819052600090612b049083018461425d565b6001600160a01b03929092168252602082015260400190565b600060018060a01b038516825283602083015260606040830152612b04606083018461425d565b60006080825261448260808301876141b4565b60208301959095525060408101929092526001600160a01b0316606090910152919050565b90815260200190565b600060e0820160ff87168352602060e08185015281875180845261010093508386019150838382028701019350828901855b828110156145445787860360ff190184528151805187528581015186880152604080820151908801526060808201519088015260809081015160a0918801829052906145308189018361425d565b9750505092840192908401906001016144e2565b5050505050828103604084015261455b81866141b4565b915050612b046060830184614289565b6000602082526130c8602083018461425d565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b602080825260029082015261702160f01b604082015260600190565b60208082526021908201527f5472616e7366657248656c7065723a20415050524f56455f4641494c45445f6d6040820152606560f81b606082015260800190565b6020808252601e908201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604082015260600190565b6020808252601a908201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604082015260600190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b60208082526022908201527f5472616e7366657248656c7065723a205452414e534645525f4641494c45445f6040820152616d6560f01b606082015260800190565b6000602082526147176020830184516142be565b602083015161472960408401826142be565b5060408301516101208060608501526147466101408501836141b4565b91506060850151601f198086850301608087015261476484836141b4565b935060808701519150808685030160a087015261478184836141f7565b935060a08701519150808685030160c087015261479e84836141f7565b935060c08701519150808685030160e08701526147bb848361422b565b935060e087015191506101008187860301818801526147da858461422b565b945080880151925050506147f0828601826142cb565b5090949350505050565b60e0808252855190820152602085015160ff1661010082015260408501516001600160a01b03908116610120830152606086015116610140820152608085015161016082015260a085015160c061018083015260009061485e6101a084018261425d565b91505061486e6020830186614289565b60a082019390935260c0015292915050565b9182526001600160a01b0316602082015260400190565b600085825284602083015260018060a01b0384166040830152608060608301526148c4608083018461425d565b9695505050505050565b9283526020830191909152604082015260600190565b600086825285602083015284604083015283606083015260a0608083015261385260a083018461425d565b6040518181016001600160401b038111828210171561492a57fe5b604052919050565b60006001600160401b0382111561494557fe5b5060209081020190565b60006001600160401b0382111561496257fe5b50601f01601f191660200190565b6000808585111561497f578182fd5b8386111561498b578182fd5b5050820193919092039150565b60005b838110156149b357818101518382015260200161499b565b838111156103c85750506000910152565b6001600160a01b03811681146149d957600080fd5b5056fea2646970667358221220deaf997b91a082bfadfd38cddaa84be166496d0ea204c112ad6f38eff0e4a0e064736f6c63430007060033