0x60806040523480156200001157600080fd5b5060405162001d0a38038062001d0a83398101604081905262000034916200013b565b8162000040816200006c565b508051600355602081015160045560408101516005556060810151600655608001516007555062000360565b60026200007a828262000294565b5050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715620000bf57620000bf6200007e565b604052919050565b600082601f830112620000d957600080fd5b60405160a081016001600160401b0381118282101715620000fe57620000fe6200007e565b6040528060a08401858111156200011457600080fd5b845b818110156200013057805183526020928301920162000116565b509195945050505050565b60008060c083850312156200014f57600080fd5b82516001600160401b03808211156200016757600080fd5b818501915085601f8301126200017c57600080fd5b8151818111156200019157620001916200007e565b60209150620001a9601f8201601f1916830162000094565b8181528783838601011115620001be57600080fd5b60005b82811015620001de578481018401518282018501528301620001c1565b5060008383830101528095505050620001fa86828701620000c7565b925050509250929050565b600181811c908216806200021a57607f821691505b6020821081036200023b57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200028f57600081815260208120601f850160051c810160208610156200026a5750805b601f850160051c820191505b818110156200028b5782815560010162000276565b5050505b505050565b81516001600160401b03811115620002b057620002b06200007e565b620002c881620002c1845462000205565b8462000241565b602080601f831160018114620003005760008415620002e75750858301515b600019600386901b1c1916600185901b1785556200028b565b600085815260208120601f198616915b82811015620003315788860151825594840194600190910190840162000310565b5085821015620003505787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b61199a80620003706000396000f3fe608060405234801561001057600080fd5b50600436106101365760003560e01c8063669afcdd116100b8578063c5d1d5d61161007c578063c5d1d5d614610269578063c811853514610271578063dbbf69fa14610279578063e6d37b8814610282578063e985e9c514610295578063f242432a146102d157600080fd5b8063669afcdd1461022a57806371a5855c14610233578063930e70d8146102465780639e6f81701461024e578063a22cb4651461025657600080fd5b80633069b0a2116100ff5780633069b0a2146101c157806343d7a41e146101ca5780634dd6c8de146101d35780634e1273f4146102015780635612bcbb1461022157600080fd5b8062fdd58e1461013b57806301ffc9a7146101615780630e89341c1461018457806318455da1146101a45780632eb2c2d6146101ac575b600080fd5b61014e6101493660046110b3565b6102e4565b6040519081526020015b60405180910390f35b61017461016f3660046110f6565b61037d565b6040519015158152602001610158565b610197610192366004611113565b6103cd565b6040516101589190611172565b61014e600481565b6101bf6101ba3660046112d1565b610461565b005b61014e60075481565b61014e60065481565b6101746101e13660046110b3565b600860209081526000928352604080842090915290825290205460ff1681565b61021461020f36600461137b565b6104ad565b6040516101589190611481565b61014e60045481565b61014e60035481565b610174610241366004611494565b6105d7565b61014e600381565b61014e600081565b6101bf6102643660046114f5565b6106f1565b61014e600181565b61014e600281565b61014e60055481565b6101bf610290366004611531565b610700565b6101746102a3366004611581565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b6101bf6102df3660046115b4565b610869565b60006001600160a01b0383166103545760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a2061646472657373207a65726f206973206e6f742061207660448201526930b634b21037bbb732b960b11b60648201526084015b60405180910390fd5b506000818152602081815260408083206001600160a01b03861684529091529020545b92915050565b60006001600160e01b03198216636cdb3d1360e11b14806103ae57506001600160e01b031982166303a24d0760e21b145b8061037757506301ffc9a760e01b6001600160e01b0319831614610377565b6060600280546103dc90611619565b80601f016020809104026020016040519081016040528092919081815260200182805461040890611619565b80156104555780601f1061042a57610100808354040283529160200191610455565b820191906000526020600020905b81548152906001019060200180831161043857829003601f168201915b50505050509050919050565b6001600160a01b03851633148061047d575061047d85336102a3565b6104995760405162461bcd60e51b815260040161034b90611653565b6104a685858585856108ae565b5050505050565b606081518351146105125760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b606482015260840161034b565b6000835167ffffffffffffffff81111561052e5761052e611185565b604051908082528060200260200182016040528015610557578160200160208202803683370190505b50905060005b84518110156105cf576105a285828151811061057b5761057b6116a1565b6020026020010151858381518110610595576105956116a1565b60200260200101516102e4565b8282815181106105b4576105b46116a1565b60209081029190910101526105c8816116cd565b905061055d565b509392505050565b600080846105e85750600354610666565b600185036105f95750600454610666565b6002850361060a5750600554610666565b6003850361061b5750600654610666565b6004850361062c5750600754610666565b60405162461bcd60e51b815260206004820152600f60248201526e125b9d985b1a59081d1bdad95b9259608a1b604482015260640161034b565b6040516bffffffffffffffffffffffff19606088901b16602082015260348101869052605481018590526106b790849083906074015b60405160208183030381529060405280519060200120610a8b565b80156106e757506001600160a01b038616600090815260086020908152604080832088845290915290205460ff16155b9695505050505050565b6106fc338383610aa1565b5050565b6000836107105750600354610750565b600184036107215750600454610750565b600284036107325750600554610750565b600384036107435750600654610750565b6004840361062c57506007545b6040516bffffffffffffffffffffffff193360601b1660208201526034810185905260548101849052610789908390839060740161069c565b6107c55760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b210383937b7b360991b604482015260640161034b565b33600090815260086020908152604080832087845290915290205460ff16156108225760405162461bcd60e51b815260206004820152600f60248201526e105b1c9958591e4818db185a5b5959608a1b604482015260640161034b565b61083d33858560405180602001604052806000815250610b81565b505033600090815260086020908152604080832094835293905291909120805460ff1916600117905550565b6001600160a01b038516331480610885575061088585336102a3565b6108a15760405162461bcd60e51b815260040161034b90611653565b6104a68585858585610c95565b81518351146109105760405162461bcd60e51b815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206044820152670dad2e6dac2e8c6d60c31b606482015260840161034b565b6001600160a01b0384166109365760405162461bcd60e51b815260040161034b906116e6565b3360005b8451811015610a1d576000858281518110610957576109576116a1565b602002602001015190506000858381518110610975576109756116a1565b602090810291909101810151600084815280835260408082206001600160a01b038e1683529093529190912054909150818110156109c55760405162461bcd60e51b815260040161034b9061172b565b6000838152602081815260408083206001600160a01b038e8116855292528083208585039055908b16825281208054849290610a02908490611775565b9250508190555050505080610a16906116cd565b905061093a565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051610a6d929190611788565b60405180910390a4610a83818787878787610dbf565b505050505050565b600082610a988584610f1a565b14949350505050565b816001600160a01b0316836001600160a01b031603610b145760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b606482015260840161034b565b6001600160a01b03838116600081815260016020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b038416610be15760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b606482015260840161034b565b336000610bed85610f5f565b90506000610bfa85610f5f565b90506000868152602081815260408083206001600160a01b038b16845290915281208054879290610c2c908490611775565b909155505060408051878152602081018790526001600160a01b03808a1692600092918716917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4610c8c83600089898989610faa565b50505050505050565b6001600160a01b038416610cbb5760405162461bcd60e51b815260040161034b906116e6565b336000610cc785610f5f565b90506000610cd485610f5f565b90506000868152602081815260408083206001600160a01b038c16845290915290205485811015610d175760405162461bcd60e51b815260040161034b9061172b565b6000878152602081815260408083206001600160a01b038d8116855292528083208985039055908a16825281208054889290610d54908490611775565b909155505060408051888152602081018890526001600160a01b03808b16928c821692918816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4610db4848a8a8a8a8a610faa565b505050505050505050565b6001600160a01b0384163b15610a835760405163bc197c8160e01b81526001600160a01b0385169063bc197c8190610e0390899089908890889088906004016117b6565b6020604051808303816000875af1925050508015610e3e575060408051601f3d908101601f19168201909252610e3b91810190611814565b60015b610eea57610e4a611831565b806308c379a003610e835750610e5e61184d565b80610e695750610e85565b8060405162461bcd60e51b815260040161034b9190611172565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e2d455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b606482015260840161034b565b6001600160e01b0319811663bc197c8160e01b14610c8c5760405162461bcd60e51b815260040161034b906118d7565b600081815b84518110156105cf57610f4b82868381518110610f3e57610f3e6116a1565b6020026020010151611065565b915080610f57816116cd565b915050610f1f565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110610f9957610f996116a1565b602090810291909101015292915050565b6001600160a01b0384163b15610a835760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e6190610fee908990899088908890889060040161191f565b6020604051808303816000875af1925050508015611029575060408051601f3d908101601f1916820190925261102691810190611814565b60015b61103557610e4a611831565b6001600160e01b0319811663f23a6e6160e01b14610c8c5760405162461bcd60e51b815260040161034b906118d7565b6000818310611081576000828152602084905260409020611090565b60008381526020839052604090205b9392505050565b80356001600160a01b03811681146110ae57600080fd5b919050565b600080604083850312156110c657600080fd5b6110cf83611097565b946020939093013593505050565b6001600160e01b0319811681146110f357600080fd5b50565b60006020828403121561110857600080fd5b8135611090816110dd565b60006020828403121561112557600080fd5b5035919050565b6000815180845260005b8181101561115257602081850181015186830182015201611136565b506000602082860101526020601f19601f83011685010191505092915050565b602081526000611090602083018461112c565b634e487b7160e01b600052604160045260246000fd5b601f8201601f1916810167ffffffffffffffff811182821017156111c1576111c1611185565b6040525050565b600067ffffffffffffffff8211156111e2576111e2611185565b5060051b60200190565b600082601f8301126111fd57600080fd5b8135602061120a826111c8565b604051611217828261119b565b83815260059390931b850182019282810191508684111561123757600080fd5b8286015b84811015611252578035835291830191830161123b565b509695505050505050565b600082601f83011261126e57600080fd5b813567ffffffffffffffff81111561128857611288611185565b60405161129f601f8301601f19166020018261119b565b8181528460208386010111156112b457600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600060a086880312156112e957600080fd5b6112f286611097565b945061130060208701611097565b9350604086013567ffffffffffffffff8082111561131d57600080fd5b61132989838a016111ec565b9450606088013591508082111561133f57600080fd5b61134b89838a016111ec565b9350608088013591508082111561136157600080fd5b5061136e8882890161125d565b9150509295509295909350565b6000806040838503121561138e57600080fd5b823567ffffffffffffffff808211156113a657600080fd5b818501915085601f8301126113ba57600080fd5b813560206113c7826111c8565b6040516113d4828261119b565b83815260059390931b85018201928281019150898411156113f457600080fd5b948201945b838610156114195761140a86611097565b825294820194908201906113f9565b9650508601359250508082111561142f57600080fd5b5061143c858286016111ec565b9150509250929050565b600081518084526020808501945080840160005b838110156114765781518752958201959082019060010161145a565b509495945050505050565b6020815260006110906020830184611446565b600080600080608085870312156114aa57600080fd5b6114b385611097565b93506020850135925060408501359150606085013567ffffffffffffffff8111156114dd57600080fd5b6114e9878288016111ec565b91505092959194509250565b6000806040838503121561150857600080fd5b61151183611097565b91506020830135801515811461152657600080fd5b809150509250929050565b60008060006060848603121561154657600080fd5b8335925060208401359150604084013567ffffffffffffffff81111561156b57600080fd5b611577868287016111ec565b9150509250925092565b6000806040838503121561159457600080fd5b61159d83611097565b91506115ab60208401611097565b90509250929050565b600080600080600060a086880312156115cc57600080fd5b6115d586611097565b94506115e360208701611097565b93506040860135925060608601359150608086013567ffffffffffffffff81111561160d57600080fd5b61136e8882890161125d565b600181811c9082168061162d57607f821691505b60208210810361164d57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252602e908201527f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60408201526d195c881bdc88185c1c1c9bdd995960921b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016116df576116df6116b7565b5060010190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b80820180821115610377576103776116b7565b60408152600061179b6040830185611446565b82810360208401526117ad8185611446565b95945050505050565b6001600160a01b0386811682528516602082015260a0604082018190526000906117e290830186611446565b82810360608401526117f48186611446565b90508281036080840152611808818561112c565b98975050505050505050565b60006020828403121561182657600080fd5b8151611090816110dd565b600060033d111561184a5760046000803e5060005160e01c5b90565b600060443d101561185b5790565b6040516003193d81016004833e81513d67ffffffffffffffff816024840111818411171561188b57505050505090565b82850191508151818111156118a35750505050505090565b843d87010160208285010111156118bd5750505050505090565b6118cc6020828601018761119b565b509095945050505050565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b6001600160a01b03868116825285166020820152604081018490526060810183905260a0608082018190526000906119599083018461112c565b97965050505050505056fea264697066735822122041fc0bdfb7e38d7fcc3a9cca58f7bcc0145197e620a62ac102e0c0c90fb6a94064736f6c6343000815003300000000000000000000000000000000000000000000000000000000000000c0aba74d42bc4cc9f408492406910d776cfce3d4ee65130a08f4c94416950fb5660eff9d36e970d7ff8514d98f8d6e5e97bd0613bcffbdcda0b1e50809cfe1b9d07d5bf9851a7755ce6f6b1134a4e593a37b4f619e307356a1ff35c1cd070f9a8881868e9e5f659108d234fc64d6a71e452bc265fb16bb40fdb1b807537071f9818a01ecb20f701922e083d5a2f088e12b619815ca753fde2dd9949c39585a1319000000000000000000000000000000000000000000000000000000000000003f697066733a2f2f516d5053325279664346324732364e50416b32626878706e43597a486564724b6731644a32454c4247633553694e2f7b69647d2e6a736f6e00