60806040523480156200001157600080fd5b506040518060400160405280600381526020017f55534400000000000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f55534400000000000000000000000000000000000000000000000000000000008152506200009e62000092620000ea60201b60201c565b620000f260201b60201c565b8160049081620000af9190620005b3565b508060059081620000c19190620005b3565b505050620000e4336d027716b6a0adc2d677c080000000620001b660201b60201c565b620007b5565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000228576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200021f90620006fb565b60405180910390fd5b6200023c600083836200032f60201b60201c565b80600360008282546200025091906200074c565b9250508190555080600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620002a891906200074c565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200030f919062000798565b60405180910390a36200032b600083836200033460201b60201c565b5050565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620003bb57607f821691505b602082108103620003d157620003d062000373565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026200043b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620003fc565b620004478683620003fc565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620004946200048e62000488846200045f565b62000469565b6200045f565b9050919050565b6000819050919050565b620004b08362000473565b620004c8620004bf826200049b565b84845462000409565b825550505050565b600090565b620004df620004d0565b620004ec818484620004a5565b505050565b5b81811015620005145762000508600082620004d5565b600181019050620004f2565b5050565b601f82111562000563576200052d81620003d7565b6200053884620003ec565b8101602085101562000548578190505b620005606200055785620003ec565b830182620004f1565b50505b505050565b600082821c905092915050565b6000620005886000198460080262000568565b1980831691505092915050565b6000620005a3838362000575565b9150826002028217905092915050565b620005be8262000339565b67ffffffffffffffff811115620005da57620005d962000344565b5b620005e68254620003a2565b620005f382828562000518565b600060209050601f8311600181146200062b576000841562000616578287015190505b62000622858262000595565b86555062000692565b601f1984166200063b86620003d7565b60005b8281101562000665578489015182556001820191506020850194506020810190506200063e565b8683101562000685578489015162000681601f89168262000575565b8355505b6001600288020188555050505b505050505050565b600082825260208201905092915050565b7f42455032303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620006e3601f836200069a565b9150620006f082620006ab565b602082019050919050565b600060208201905081810360008301526200071681620006d4565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000759826200045f565b915062000766836200045f565b92508282019050808211156200078157620007806200071d565b5b92915050565b62000792816200045f565b82525050565b6000602082019050620007af600083018462000787565b92915050565b611c9880620007c56000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80637102410c11610097578063a457c2d711610066578063a457c2d714610276578063a9059cbb146102a6578063dd62ed3e146102d6578063f2fde38b14610306576100f5565b80637102410c14610214578063715018a6146102305780638da5cb5b1461023a57806395d89b4114610258576100f5565b806323b872dd116100d357806323b872dd14610166578063313ce5671461019657806339509351146101b457806370a08231146101e4576100f5565b806306fdde03146100fa578063095ea7b31461011857806318160ddd14610148575b600080fd5b610102610322565b60405161010f9190610fed565b60405180910390f35b610132600480360381019061012d91906110b7565b6103b4565b60405161013f9190611112565b60405180910390f35b6101506103d2565b60405161015d919061113c565b60405180910390f35b610180600480360381019061017b9190611157565b6103dc565b60405161018d9190611112565b60405180910390f35b61019e6104d4565b6040516101ab91906111c6565b60405180910390f35b6101ce60048036038101906101c991906110b7565b6104dd565b6040516101db9190611112565b60405180910390f35b6101fe60048036038101906101f991906111e1565b610589565b60405161020b919061113c565b60405180910390f35b61022e60048036038101906102299190611343565b6105d2565b005b610238610672565b005b6102426106fa565b60405161024f91906113ca565b60405180910390f35b610260610723565b60405161026d9190610fed565b60405180910390f35b610290600480360381019061028b91906110b7565b6107b5565b60405161029d9190611112565b60405180910390f35b6102c060048036038101906102bb91906110b7565b6108a0565b6040516102cd9190611112565b60405180910390f35b6102f060048036038101906102eb91906113e5565b6108be565b6040516102fd919061113c565b60405180910390f35b610320600480360381019061031b91906111e1565b610945565b005b60606006805461033190611454565b80601f016020809104026020016040519081016040528092919081815260200182805461035d90611454565b80156103aa5780601f1061037f576101008083540402835291602001916103aa565b820191906000526020600020905b81548152906001019060200180831161038d57829003601f168201915b5050505050905090565b60006103c86103c1610a3c565b8484610a44565b6001905092915050565b6000600354905090565b60006103e9848484610c0d565b6000600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610434610a3c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156104b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104ab906114f7565b60405180910390fd5b6104c8856104c0610a3c565b858403610a44565b60019150509392505050565b60006012905090565b600061057f6104ea610a3c565b8484600260006104f8610a3c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461057a9190611546565b610a44565b6001905092915050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6105da610a3c565b73ffffffffffffffffffffffffffffffffffffffff166105f86106fa565b73ffffffffffffffffffffffffffffffffffffffff161461064e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610645906115c6565b60405180910390fd5b816006908161065d9190611792565b50806007908161066d9190611792565b505050565b61067a610a3c565b73ffffffffffffffffffffffffffffffffffffffff166106986106fa565b73ffffffffffffffffffffffffffffffffffffffff16146106ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106e5906115c6565b60405180910390fd5b6106f86000610e8f565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606007805461073290611454565b80601f016020809104026020016040519081016040528092919081815260200182805461075e90611454565b80156107ab5780601f10610780576101008083540402835291602001916107ab565b820191906000526020600020905b81548152906001019060200180831161078e57829003601f168201915b5050505050905090565b600080600260006107c4610a3c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610881576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610878906118d6565b60405180910390fd5b61089561088c610a3c565b85858403610a44565b600191505092915050565b60006108b46108ad610a3c565b8484610c0d565b6001905092915050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61094d610a3c565b73ffffffffffffffffffffffffffffffffffffffff1661096b6106fa565b73ffffffffffffffffffffffffffffffffffffffff16146109c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b8906115c6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610a30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2790611968565b60405180910390fd5b610a3981610e8f565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610ab3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aaa906119fa565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610b22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1990611a8c565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610c00919061113c565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610c7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7390611b1e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610ceb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce290611bb0565b60405180910390fd5b610cf6838383610f53565b6000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610d7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7490611c42565b60405180910390fd5b818103600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610e129190611546565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e76919061113c565b60405180910390a3610e89848484610f58565b50505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610f97578082015181840152602081019050610f7c565b60008484015250505050565b6000601f19601f8301169050919050565b6000610fbf82610f5d565b610fc98185610f68565b9350610fd9818560208601610f79565b610fe281610fa3565b840191505092915050565b600060208201905081810360008301526110078184610fb4565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061104e82611023565b9050919050565b61105e81611043565b811461106957600080fd5b50565b60008135905061107b81611055565b92915050565b6000819050919050565b61109481611081565b811461109f57600080fd5b50565b6000813590506110b18161108b565b92915050565b600080604083850312156110ce576110cd611019565b5b60006110dc8582860161106c565b92505060206110ed858286016110a2565b9150509250929050565b60008115159050919050565b61110c816110f7565b82525050565b60006020820190506111276000830184611103565b92915050565b61113681611081565b82525050565b6000602082019050611151600083018461112d565b92915050565b6000806000606084860312156111705761116f611019565b5b600061117e8682870161106c565b935050602061118f8682870161106c565b92505060406111a0868287016110a2565b9150509250925092565b600060ff82169050919050565b6111c0816111aa565b82525050565b60006020820190506111db60008301846111b7565b92915050565b6000602082840312156111f7576111f6611019565b5b60006112058482850161106c565b91505092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61125082610fa3565b810181811067ffffffffffffffff8211171561126f5761126e611218565b5b80604052505050565b600061128261100f565b905061128e8282611247565b919050565b600067ffffffffffffffff8211156112ae576112ad611218565b5b6112b782610fa3565b9050602081019050919050565b82818337600083830152505050565b60006112e66112e184611293565b611278565b90508281526020810184848401111561130257611301611213565b5b61130d8482856112c4565b509392505050565b600082601f83011261132a5761132961120e565b5b813561133a8482602086016112d3565b91505092915050565b6000806040838503121561135a57611359611019565b5b600083013567ffffffffffffffff8111156113785761137761101e565b5b61138485828601611315565b925050602083013567ffffffffffffffff8111156113a5576113a461101e565b5b6113b185828601611315565b9150509250929050565b6113c481611043565b82525050565b60006020820190506113df60008301846113bb565b92915050565b600080604083850312156113fc576113fb611019565b5b600061140a8582860161106c565b925050602061141b8582860161106c565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061146c57607f821691505b60208210810361147f5761147e611425565b5b50919050565b7f42455032303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b60006114e1602883610f68565b91506114ec82611485565b604082019050919050565b60006020820190508181036000830152611510816114d4565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061155182611081565b915061155c83611081565b925082820190508082111561157457611573611517565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006115b0602083610f68565b91506115bb8261157a565b602082019050919050565b600060208201905081810360008301526115df816115a3565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026116487fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261160b565b611652868361160b565b95508019841693508086168417925050509392505050565b6000819050919050565b600061168f61168a61168584611081565b61166a565b611081565b9050919050565b6000819050919050565b6116a983611674565b6116bd6116b582611696565b848454611618565b825550505050565b600090565b6116d26116c5565b6116dd8184846116a0565b505050565b5b81811015611701576116f66000826116ca565b6001810190506116e3565b5050565b601f82111561174657611717816115e6565b611720846115fb565b8101602085101561172f578190505b61174361173b856115fb565b8301826116e2565b50505b505050565b600082821c905092915050565b60006117696000198460080261174b565b1980831691505092915050565b60006117828383611758565b9150826002028217905092915050565b61179b82610f5d565b67ffffffffffffffff8111156117b4576117b3611218565b5b6117be8254611454565b6117c9828285611705565b600060209050601f8311600181146117fc57600084156117ea578287015190505b6117f48582611776565b86555061185c565b601f19841661180a866115e6565b60005b828110156118325784890151825560018201915060208501945060208101905061180d565b8683101561184f578489015161184b601f891682611758565b8355505b6001600288020188555050505b505050505050565b7f42455032303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006118c0602583610f68565b91506118cb82611864565b604082019050919050565b600060208201905081810360008301526118ef816118b3565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000611952602683610f68565b915061195d826118f6565b604082019050919050565b6000602082019050818103600083015261198181611945565b9050919050565b7f42455032303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006119e4602483610f68565b91506119ef82611988565b604082019050919050565b60006020820190508181036000830152611a13816119d7565b9050919050565b7f42455032303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000611a76602283610f68565b9150611a8182611a1a565b604082019050919050565b60006020820190508181036000830152611aa581611a69565b9050919050565b7f42455032303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000611b08602583610f68565b9150611b1382611aac565b604082019050919050565b60006020820190508181036000830152611b3781611afb565b9050919050565b7f42455032303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000611b9a602383610f68565b9150611ba582611b3e565b604082019050919050565b60006020820190508181036000830152611bc981611b8d565b9050919050565b7f42455032303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000611c2c602683610f68565b9150611c3782611bd0565b604082019050919050565b60006020820190508181036000830152611c5b81611c1f565b905091905056fea264697066735822122033c03d6c933721f22427f70a47f74fe69e40cb208f33c9314b232d37f80a667b64736f6c63430008120033