0x60a060405273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc260805234801561002857600080fd5b5061003233610037565b610087565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b608051612ce2620000aa600039600081816109da0152610a500152612ce26000f3fe6080604052600436106100955760003560e01c8063a88d5e8611610059578063a88d5e8614610163578063ea72b54914610183578063f04f2707146101a3578063f2fde38b146101c3578063fa461e33146101e357600080fd5b80630c80ac4d146100a15780633a4558d7146100d7578063715018a6146101045780637b09d0031461011b5780638da5cb5b1461013b57600080fd5b3661009c57005b600080fd5b3480156100ad57600080fd5b506100c16100bc366004611f4f565b610203565b6040516100ce9190611f90565b60405180910390f35b3480156100e357600080fd5b506100f76100f23660046121b3565b6102ca565b6040516100ce919061222a565b34801561011057600080fd5b50610119610423565b005b34801561012757600080fd5b506100c161013636600461223d565b610437565b34801561014757600080fd5b506000546040516001600160a01b0390911681526020016100ce565b34801561016f57600080fd5b506100f761017e3660046122b1565b6104e4565b34801561018f57600080fd5b5061011961019e3660046122c9565b610682565b3480156101af57600080fd5b506101196101be366004612450565b6107cc565b3480156101cf57600080fd5b506101196101de36600461255a565b610c3a565b3480156101ef57600080fd5b506101196101fe366004612577565b610cb3565b60606000826001600160401b0381111561021f5761021f61201a565b60405190808252806020026020018201604052801561025257816020015b606081526020019060019003908161023d5790505b50905060005b838110156102c057610290858583818110610275576102756125f6565b9050602002810190610287919061260c565b6100f29061262c565b8282815181106102a2576102a26125f6565b602002602001018190525080806102b89061264e565b915050610258565b5090505b92915050565b6060818101518251516000906001600160401b038111156102ed576102ed61201a565b604051908082528060200260200182016040528015610316578160200160208202803683370190505b50905060005b84515181101561041b5760006001600160a01b031685602001518281518110610347576103476125f6565b60200260200101516001600160a01b0316036103955761038985600001518281518110610376576103766125f6565b6020026020010151848760400151610d47565b604087015292506103e7565b6103df856000015182815181106103ae576103ae6125f6565b6020026020010151866020015183815181106103cc576103cc6125f6565b602002602001015185886040015161105c565b604087015292505b84604001518282815181106103fe576103fe6125f6565b6020908102919091010152806104138161264e565b91505061031c565b509392505050565b61042b61130b565b6104356000611365565b565b60606000826001600160401b038111156104535761045361201a565b60405190808252806020026020018201604052801561048657816020015b60608152602001906001900390816104715790505b50905060005b838110156102c0576104b48585838181106104a9576104a96125f6565b9050606002016104e4565b8282815181106104c6576104c66125f6565b602002602001018190525080806104dc9061264e565b91505061048c565b604080516002808252606080830184529260009291906020830190803683370190505090506000610518602085018561255a565b6001600160a01b03166370a08231610536606087016040880161255a565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa15801561057a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061059e9190612667565b905060006105b2604086016020870161255a565b6001600160a01b03166370a082316105d0606088016040890161255a565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015610614573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106389190612667565b9050818360008151811061064e5761064e6125f6565b602002602001018181525050808360018151811061066e5761066e6125f6565b602090810291909101015250909392505050565b61068a61130b565b600030888888888888886040516020016106ab9897969594939291906126b2565b60408051601f1981840301815260018084528383019092529250600091906020808301908036833750506040805160018082528183019092529293506000929150602080830190803683370190505090508b82600081518110610710576107106125f6565b60200260200101906001600160a01b031690816001600160a01b0316815250508a81600081518110610744576107446125f6565b6020908102919091010152604051632e1c224f60e11b815273ba12222222228d8ba445958a75a0704d566bf2c890635c38449e9061078c903090869086908990600401612793565b600060405180830381600087803b1580156107a657600080fd5b505af11580156107ba573d6000803e3d6000fd5b50505050505050505050505050505050565b3373ba12222222228d8ba445958a75a0704d566bf2c81461082d5760405162461bcd60e51b815260206004820152601660248201527518d85b1b195c881cda1bdd5b19081899481d985d5b1d60521b60448201526064015b60405180910390fd5b6000806000806000858060200190518101906108499190612867565b94509450945094509450306001600160a01b0316856001600160a01b0316146108b45760405162461bcd60e51b815260206004820152601e60248201527f616464726573732073686f756c6420626520626f7420636f6e747261637400006044820152606401610824565b6000876000815181106108c9576108c96125f6565b6020026020010151896000815181106108e4576108e46125f6565b60200260200101516108f6919061296e565b9050600061093b86868d600081518110610912576109126125f6565b60200260200101518d60008151811061092d5761092d6125f6565b6020026020010151886113b5565b905081811161097d5760405162461bcd60e51b815260206004820152600e60248201526d6e6f742070726f66697461626c6560901b6044820152606401610824565b6109c973ba12222222228d8ba445958a75a0704d566bf2c8838d6000815181106109a9576109a96125f6565b60200260200101516001600160a01b03166114729092919063ffffffff16565b60006109d582846114c9565b9150507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168c600081518110610a1557610a156125f6565b60200260200101516001600160a01b031603610b63576000610a3782866114c9565b604051632e1a7d4d60e01b8152600481018590529092507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169150632e1a7d4d90602401600060405180830381600087803b158015610a9d57600080fd5b505af1158015610ab1573d6000803e3d6000fd5b505050506000610ac96000546001600160a01b031690565b6001600160a01b03168260405160006040518083038185875af1925050503d8060008114610b13576040519150601f19603f3d011682016040523d82523d6000602084013e610b18565b606091505b5050905080610b5c5760405162461bcd60e51b815260206004820152601060248201526f0c6c2dc40dcdee840e6cadcc840cae8d60831b6044820152606401610824565b5050610b8c565b610b8c610b786000546001600160a01b031690565b828e6000815181106109a9576109a96125f6565b8315610c2c57604051600090419086908381818185875af1925050503d8060008114610bd4576040519150601f19603f3d011682016040523d82523d6000602084013e610bd9565b606091505b5050905080610c2a5760405162461bcd60e51b815260206004820152601960248201527f63616e206e6f742073656e642065746820746f206d696e6572000000000000006044820152606401610824565b505b505050505050505050505050565b610c4261130b565b6001600160a01b038116610ca75760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610824565b610cb081611365565b50565b600080610cc283850185612981565b9092509050336001600160a01b03831614610d175760405162461bcd60e51b815260206004820152601560248201527418d85b1b195c881cda1bdd5b19081899481c1bdbdb605a1b6044820152606401610824565b6000808713610d265785610d28565b865b9050610d3e6001600160a01b0383168483611472565b50505050505050565b60008060008311610dae5760405162461bcd60e51b815260206004820152602b60248201527f556e697377617056324c6962726172793a20494e53554646494349454e545f4960448201526a1394155517d05353d5539560aa1b6064820152608401610824565b6000859050600080826001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015610df4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e1891906129ea565b50915091506000806000856001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e60573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e849190612a2d565b6001600160a01b03168a6001600160a01b031614610f0557856001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015610eda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610efe9190612a2d565b8486610f6a565b856001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f679190612a2d565b85855b9250925092506000826001600160701b0316118015610f9257506000816001600160701b0316115b610fef5760405162461bcd60e51b815260206004820152602860248201527f556e697377617056324c6962726172793a20494e53554646494349454e545f4c604482015267495155494449545960c01b6064820152608401610824565b6000610ffd8a6103e5612a4a565b905060006110146001600160701b03841683612a4a565b9050600082611025866103e8612a61565b6001600160701b0316611038919061296e565b905060006110468284612a8c565b969f969e50959c50505050505050505050505050565b60008060008690506000856001600160a01b0316826001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110d29190612a2d565b6001600160a01b03161461114757816001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa15801561111e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111429190612a2d565b6111a9565b816001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015611185573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111a99190612a2d565b9050600087905060006040518060a00160405280896001600160a01b03168152602001846001600160a01b03168152602001888152602001856001600160a01b031663ddca3f436040518163ffffffff1660e01b8152600401602060405180830381865afa15801561121f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112439190612aae565b62ffffff90811682526000602092830181905260408051636352813560e11b815285516001600160a01b0390811660048301529486015185166024820152908501516044820152606085015190921660648301526080840151831660848301529293509084169063c6a5026a9060a4016080604051808303816000875af11580156112d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112f69190612ad3565b50959d919c50909a5050505050505050505050565b6000546001600160a01b031633146104355760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610824565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600083815b87518110156114665760008782815181106113d7576113d76125f6565b60200260200101510361142b576114228882815181106113f9576113f96125f6565b60200260200101518387878581518110611415576114156125f6565b60200260200101516114ef565b95509150611454565b61144f888281518110611440576114406125f6565b6020026020010151838761184b565b955091505b8061145e8161264e565b9150506113ba565b50929695505050505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526114c4908490611b05565b505050565b600080838311156114df575060009050806114e8565b50600190508183035b9250929050565b60008060008690506000866001600160a01b0316826001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015611541573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115659190612a2d565b6001600160a01b0316146115da57816001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115d59190612a2d565b61163c565b816001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015611618573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061163c9190612a2d565b90506000816001600160a01b0316836001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015611688573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ac9190612a2d565b6001600160a01b0316146116c15760006116c3565b855b90506000826001600160a01b0316846001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa15801561170f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117339190612a2d565b6001600160a01b03161461174857600061174a565b865b90506117606001600160a01b038a168b8a611472565b6040805160208101825260008152905163022c0d9f60e01b81526001600160a01b0386169163022c0d9f9161179d91869186913091600401612b19565b600060405180830381600087803b1580156117b757600080fd5b505af19250505080156117c8575060015b61183b573d8080156117f6576040519150601f19603f3d011682016040523d82523d6000602084013e6117fb565b606091505b506118058b611bd7565b6040516020016118159190612b50565b60408051601f198184030181529082905262461bcd60e51b825261082491600401612b8c565b5090989497509395505050505050565b60008060008590506000856001600160a01b0316826001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa15801561189d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118c19190612a2d565b6001600160a01b0316146118d65760006118d9565b60015b9050600087876040516020016119059291906001600160a01b0392831681529116602082015260400190565b60405160208183030381529060405290506000826119415761193c600173fffd8963efd1fc6a506488495d951d5263988d26612b9f565b611951565b6119516401000276a36001612bc6565b604051630251596160e31b815290915060009081906001600160a01b0387169063128acb089061198d90309089908e9089908b90600401612be6565b60408051808303816000875af19250505080156119c7575060408051601f3d908101601f191682019092526119c491810190612c21565b60015b611a04573d8080156119f5576040519150601f19603f3d011682016040523d82523d6000602084013e6119fa565b606091505b506118058c611bd7565b9092509050600085611a7757866001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a729190612a2d565b611ad9565b866001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ab5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ad99190612a2d565b90508086611ae75783611ae9565b825b611af290612c45565b9850985050505050505050935093915050565b6000611b5a826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316611bed9092919063ffffffff16565b8051909150156114c45780806020019051810190611b789190612c61565b6114c45760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610824565b60606102c46001600160a01b0383166014611c06565b6060611bfc8484600085611da1565b90505b9392505050565b60606000611c15836002612a4a565b611c2090600261296e565b6001600160401b03811115611c3757611c3761201a565b6040519080825280601f01601f191660200182016040528015611c61576020820181803683370190505b509050600360fc1b81600081518110611c7c57611c7c6125f6565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110611cab57611cab6125f6565b60200101906001600160f81b031916908160001a9053506000611ccf846002612a4a565b611cda90600161296e565b90505b6001811115611d52576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110611d0e57611d0e6125f6565b1a60f81b828281518110611d2457611d246125f6565b60200101906001600160f81b031916908160001a90535060049490941c93611d4b81612c83565b9050611cdd565b508315611bff5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610824565b606082471015611e025760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610824565b6001600160a01b0385163b611e595760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610824565b600080866001600160a01b03168587604051611e759190612c9a565b60006040518083038185875af1925050503d8060008114611eb2576040519150601f19603f3d011682016040523d82523d6000602084013e611eb7565b606091505b5091509150611ec7828286611ed2565b979650505050505050565b60608315611ee1575081611bff565b825115611ef15782518084602001fd5b8160405162461bcd60e51b81526004016108249190612b8c565b60008083601f840112611f1d57600080fd5b5081356001600160401b03811115611f3457600080fd5b6020830191508360208260051b85010111156114e857600080fd5b60008060208385031215611f6257600080fd5b82356001600160401b03811115611f7857600080fd5b611f8485828601611f0b565b90969095509350505050565b6000602080830181845280855180835260408601915060408160051b87010192508387016000805b8381101561200c57888603603f19018552825180518088529088019088880190845b81811015611ff65783518352928a0192918a0191600101611fda565b5090975050509386019391860191600101611fb8565b509398975050505050505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b03811182821017156120585761205861201a565b604052919050565b60006001600160401b038211156120795761207961201a565b5060051b60200190565b6001600160a01b0381168114610cb057600080fd5b600082601f8301126120a957600080fd5b813560206120be6120b983612060565b612030565b82815260059290921b840181019181810190868411156120dd57600080fd5b8286015b848110156121015780356120f481612083565b83529183019183016120e1565b509695505050505050565b60006080828403121561211e57600080fd5b604051608081016001600160401b0382821081831117156121415761214161201a565b81604052829350843591508082111561215957600080fd5b61216586838701612098565b8352602085013591508082111561217b57600080fd5b5061218885828601612098565b6020830152506040830135604082015260608301356121a681612083565b6060919091015292915050565b6000602082840312156121c557600080fd5b81356001600160401b038111156121db57600080fd5b6121e78482850161210c565b949350505050565b600081518084526020808501945080840160005b8381101561221f57815187529582019590820190600101612203565b509495945050505050565b602081526000611bff60208301846121ef565b6000806020838503121561225057600080fd5b82356001600160401b038082111561226757600080fd5b818501915085601f83011261227b57600080fd5b81358181111561228a57600080fd5b86602060608302850101111561229f57600080fd5b60209290920196919550909350505050565b6000606082840312156122c357600080fd5b50919050565b600080600080600080600080600060c08a8c0312156122e757600080fd5b89356122f281612083565b985060208a0135975060408a01356001600160401b038082111561231557600080fd5b6123218d838e01611f0b565b909950975060608c013591508082111561233a57600080fd5b6123468d838e01611f0b565b909750955060808c013591508082111561235f57600080fd5b5061236c8c828d01611f0b565b9a9d999c50979a9699959894979660a00135949350505050565b600082601f83011261239757600080fd5b813560206123a76120b983612060565b82815260059290921b840181019181810190868411156123c657600080fd5b8286015b8481101561210157803583529183019183016123ca565b600082601f8301126123f257600080fd5b81356001600160401b0381111561240b5761240b61201a565b61241e601f8201601f1916602001612030565b81815284602083860101111561243357600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806080858703121561246657600080fd5b84356001600160401b038082111561247d57600080fd5b818701915087601f83011261249157600080fd5b813560206124a16120b983612060565b82815260059290921b8401810191818101908b8411156124c057600080fd5b948201945b838610156124e75785356124d881612083565b825294820194908201906124c5565b985050880135925050808211156124fd57600080fd5b61250988838901612386565b9450604087013591508082111561251f57600080fd5b61252b88838901612386565b9350606087013591508082111561254157600080fd5b5061254e878288016123e1565b91505092959194509250565b60006020828403121561256c57600080fd5b8135611bff81612083565b6000806000806060858703121561258d57600080fd5b843593506020850135925060408501356001600160401b03808211156125b257600080fd5b818701915087601f8301126125c657600080fd5b8135818111156125d557600080fd5b8860208285010111156125e757600080fd5b95989497505060200194505050565b634e487b7160e01b600052603260045260246000fd5b60008235607e1983360301811261262257600080fd5b9190910192915050565b60006102c4368361210c565b634e487b7160e01b600052601160045260246000fd5b60006001820161266057612660612638565b5060010190565b60006020828403121561267957600080fd5b5051919050565b81835260006001600160fb1b0383111561269957600080fd5b8260051b80836020870137939093016020019392505050565b6001600160a01b03898116825260a060208084018290529083018990526000918a9160c08501845b8c8110156127015784356126ed81612083565b8416825293820193908201906001016126da565b508581036040870152612715818b8d612680565b9350505050828103606084015261272d818688612680565b9150508260808301529998505050505050505050565b60005b8381101561275e578181015183820152602001612746565b50506000910152565b6000815180845261277f816020860160208601612743565b601f01601f19169290920160200192915050565b6001600160a01b0385811682526080602080840182905286519184018290526000928782019290919060a0860190855b818110156127e15785518516835294830194918301916001016127c3565b505085810360408701526127f581896121ef565b93505050508281036060840152611ec78185612767565b600082601f83011261281d57600080fd5b8151602061282d6120b983612060565b82815260059290921b8401810191818101908684111561284c57600080fd5b8286015b848110156121015780518352918301918301612850565b600080600080600060a0868803121561287f57600080fd5b855161288a81612083565b809550506020808701516001600160401b03808211156128a957600080fd5b818901915089601f8301126128bd57600080fd5b81516128cb6120b982612060565b81815260059190911b8301840190848101908c8311156128ea57600080fd5b938501935b8285101561291157845161290281612083565b825293850193908501906128ef565b60408c0151909950945050508083111561292a57600080fd5b6129368a848b0161280c565b9550606089015192508083111561294c57600080fd5b505061295a8882890161280c565b925050608086015190509295509295909350565b808201808211156102c4576102c4612638565b6000806040838503121561299457600080fd5b823561299f81612083565b915060208301356129af81612083565b809150509250929050565b80516001600160701b03811681146129d157600080fd5b919050565b805163ffffffff811681146129d157600080fd5b6000806000606084860312156129ff57600080fd5b612a08846129ba565b9250612a16602085016129ba565b9150612a24604085016129d6565b90509250925092565b600060208284031215612a3f57600080fd5b8151611bff81612083565b80820281158282048414176102c4576102c4612638565b6001600160701b03818116838216028082169190828114612a8457612a84612638565b505092915050565b600082612aa957634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215612ac057600080fd5b815162ffffff81168114611bff57600080fd5b60008060008060808587031215612ae957600080fd5b845193506020850151612afb81612083565b9250612b09604086016129d6565b6060959095015193969295505050565b84815283602082015260018060a01b0383166040820152608060608201526000612b466080830184612767565b9695505050505050565b73022bc32b1baba34b7b7103932bb32b93a32b21d160651b815260008251612b7f816014850160208701612743565b9190910160140192915050565b602081526000611bff6020830184612767565b6001600160a01b03828116828216039080821115612bbf57612bbf612638565b5092915050565b6001600160a01b03818116838216019080821115612bbf57612bbf612638565b6001600160a01b0386811682528515156020830152604082018590528316606082015260a060808201819052600090611ec790830184612767565b60008060408385031215612c3457600080fd5b505080516020909101519092909150565b6000600160ff1b8201612c5a57612c5a612638565b5060000390565b600060208284031215612c7357600080fd5b81518015158114611bff57600080fd5b600081612c9257612c92612638565b506000190190565b6000825161262281846020870161274356fea26469706673582212200657a2c8089af3f6c9ebd303cec45f449892bf63fc0f79c3b230549ea1b14b3564736f6c63430008150033