0x60806040523480156200001157600080fd5b506040516200257338038062002573833981810160405281019062000037919062000b17565b601260ff16600a6200004a919062000ccc565b8162000057919062000d1d565b600081905550600054600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60005460405162000105919062000d79565b60405180910390a3600573606da31247c389aa52629016b7c6e5504d26516e9080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600573877f35379ef23323a4660827586604c7dcf387da9080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060057378f0d9a770b141fd5886e245bd470268149638349080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506005733cf148d97e03bcc911b739a0d895fd44237c3aaf9080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600573c319a081f5ea45ecc1b8590dd572881f09bfe2339080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600573839275b859aaddd789005ced6cee51f5c655df9c9080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506005732b3fbb7c27d2619de68acb2c8ff27a3c4ccf1b3a9080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600573e37add7f6b80d7e367f0015e0029a873081185c29080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600573b270f34e23dba6b438df605a1a463bdd5be8386b9080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600573bdf3160013f8e3652840136eb367fa2de57ef6859080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060057375df805a59997ad96efeac080c949c12289976ef9080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506005738242e079b9c9c2a31974898f0635e7355cdf4bae9080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060057306f6f105dd37ac6a3be59766b5407347ce49dfa69080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506005737d4ae1aae068aea2b017440c52d1b69f3cd81d479080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600573d25ac219e3e9d04df0d327c760440cc54e4fd1ad9080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060057340d6e9c9c267d9592a7f17595db25d0f489a6c1f9080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600573032ad2d0ab8abc27139f7795eb1cab2a62b4615e9080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060057360fdf9b6fe1eb870e33f90d99ab4bf1757c00f1d9080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600573e6ccb30401332aee581a9ce083fb6a54973ec2299080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506005735b4d485912dd82bda602974de0ccbf2024ed96659080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506005731db45a65c3be4f00a25aa1680bdb5942ed7de2249080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505062000d96565b600080fd5b6000819050919050565b62000af18162000adc565b811462000afd57600080fd5b50565b60008151905062000b118162000ae6565b92915050565b60006020828403121562000b305762000b2f62000ad7565b5b600062000b408482850162000b00565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000bd75780860481111562000baf5762000bae62000b49565b5b600185161562000bbf5780820291505b808102905062000bcf8562000b78565b945062000b8f565b94509492505050565b60008262000bf2576001905062000cc5565b8162000c02576000905062000cc5565b816001811462000c1b576002811462000c265762000c5c565b600191505062000cc5565b60ff84111562000c3b5762000c3a62000b49565b5b8360020a91508482111562000c555762000c5462000b49565b5b5062000cc5565b5060208310610133831016604e8410600b841016171562000c965782820a90508381111562000c905762000c8f62000b49565b5b62000cc5565b62000ca5848484600162000b85565b9250905081840481111562000cbf5762000cbe62000b49565b5b81810290505b9392505050565b600062000cd98262000adc565b915062000ce68362000adc565b925062000d157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000be0565b905092915050565b600062000d2a8262000adc565b915062000d378362000adc565b925082820262000d478162000adc565b9150828204841483151762000d615762000d6062000b49565b5b5092915050565b62000d738162000adc565b82525050565b600060208201905062000d90600083018462000d68565b92915050565b6117cd8062000da66000396000f3fe608060405234801561001057600080fd5b50600436106100cf5760003560e01c806370a082311161008c578063a457c2d711610066578063a457c2d714610228578063a9059cbb14610258578063dd62ed3e14610288578063f968f493146102b8576100cf565b806370a08231146101be57806389158d8e146101ee57806395d89b411461020a576100cf565b806306fdde03146100d4578063095ea7b3146100f257806318160ddd1461012257806323b872dd14610140578063313ce56714610170578063395093511461018e575b600080fd5b6100dc6102c2565b6040516100e991906110a4565b60405180910390f35b61010c6004803603810190610107919061115f565b6102ff565b60405161011991906111ba565b60405180910390f35b61012a610316565b60405161013791906111e4565b60405180910390f35b61015a600480360381019061015591906111ff565b61031f565b60405161016791906111ba565b60405180910390f35b6101786104d0565b604051610185919061126e565b60405180910390f35b6101a860048036038101906101a3919061115f565b6104d9565b6040516101b591906111ba565b60405180910390f35b6101d860048036038101906101d39190611289565b610577565b6040516101e591906111e4565b60405180910390f35b610208600480360381019061020391906112b6565b6105c0565b005b6102126107aa565b60405161021f91906110a4565b60405180910390f35b610242600480360381019061023d919061115f565b6107e7565b60405161024f91906111ba565b60405180910390f35b610272600480360381019061026d919061115f565b610885565b60405161027f91906111ba565b60405180910390f35b6102a2600480360381019061029d91906112f6565b6109a3565b6040516102af91906111e4565b60405180910390f35b6102c0610a2a565b005b60606040518060400160405280600c81526020017f46696e616c46616e746173790000000000000000000000000000000000000000815250905090565b600061030c338484610b36565b6001905092915050565b60008054905090565b600061032a84610cff565b82111561036c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161036390611382565b60405180910390fd5b60006103e860058461037e91906113d1565b6103889190611442565b9050600081846103989190611473565b90506103a5868683610e20565b6103c48673d88fa142b67f561c5f2cbf803bf5ae906a8f1e4184610e20565b60005b6005805490508110156104305761041d87600583815481106103ec576103eb6114a7565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1685610e20565b8080610428906114d6565b9150506103c7565b506104c3863386600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546104be9190611473565b610b36565b6001925050509392505050565b60006012905090565b600061056d338484600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610568919061151e565b610b36565b6001905092915050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6105c933610cff565b82111561060b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161060290611382565b60405180910390fd5b600082905082600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461069b9190611473565b036106b0576001836106ad9190611473565b90505b80600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546106ff919061151e565b925050819055508142610712919061151e565b600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff167fd741e738a23fd18a03a26522320d9fc6cac1fed483e215ea9150fbc2fc43385d848460405161079d929190611552565b60405180910390a2505050565b60606040518060400160405280600281526020017f4646000000000000000000000000000000000000000000000000000000000000815250905090565b600061087b338484600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546108769190611473565b610b36565b6001905092915050565b600061089033610cff565b8211156108d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c990611382565b60405180910390fd5b60006103e86005846108e491906113d1565b6108ee9190611442565b9050600081846108fe9190611473565b905061090b338683610e20565b61092a3373d88fa142b67f561c5f2cbf803bf5ae906a8f1e4184610e20565b60005b600580549050811015610996576109833360058381548110610952576109516114a7565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1685610e20565b808061098e906114d6565b91505061092d565b5060019250505092915050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b42600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115610aac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa3906115c7565b60405180910390fd5b6000600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff167fcf96a7404357442bbc147c389fc2942cb6eedcaf1aad90bb8eb4b67ce43d4fb260405160405180910390a2565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610ba5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9c90611633565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610c14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0b9061169f565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610cf291906111e4565b60405180910390a3505050565b600042600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411610d8e57600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050610e1b565b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610e189190611473565b90505b919050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610e8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e869061170b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610efe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef590611777565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610f4d9190611473565b9250508190555080600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610fa3919061151e565b925050819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161100791906111e4565b60405180910390a3505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561104e578082015181840152602081019050611033565b60008484015250505050565b6000601f19601f8301169050919050565b600061107682611014565b611080818561101f565b9350611090818560208601611030565b6110998161105a565b840191505092915050565b600060208201905081810360008301526110be818461106b565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006110f6826110cb565b9050919050565b611106816110eb565b811461111157600080fd5b50565b600081359050611123816110fd565b92915050565b6000819050919050565b61113c81611129565b811461114757600080fd5b50565b60008135905061115981611133565b92915050565b60008060408385031215611176576111756110c6565b5b600061118485828601611114565b92505060206111958582860161114a565b9150509250929050565b60008115159050919050565b6111b48161119f565b82525050565b60006020820190506111cf60008301846111ab565b92915050565b6111de81611129565b82525050565b60006020820190506111f960008301846111d5565b92915050565b600080600060608486031215611218576112176110c6565b5b600061122686828701611114565b935050602061123786828701611114565b92505060406112488682870161114a565b9150509250925092565b600060ff82169050919050565b61126881611252565b82525050565b6000602082019050611283600083018461125f565b92915050565b60006020828403121561129f5761129e6110c6565b5b60006112ad84828501611114565b91505092915050565b600080604083850312156112cd576112cc6110c6565b5b60006112db8582860161114a565b92505060206112ec8582860161114a565b9150509250929050565b6000806040838503121561130d5761130c6110c6565b5b600061131b85828601611114565b925050602061132c85828601611114565b9150509250929050565b7f496e73756666696369656e7420756e6c6f636b65642062616c616e6365000000600082015250565b600061136c601d8361101f565b915061137782611336565b602082019050919050565b6000602082019050818103600083015261139b8161135f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006113dc82611129565b91506113e783611129565b92508282026113f581611129565b9150828204841483151761140c5761140b6113a2565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061144d82611129565b915061145883611129565b92508261146857611467611413565b5b828204905092915050565b600061147e82611129565b915061148983611129565b92508282039050818111156114a1576114a06113a2565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006114e182611129565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611513576115126113a2565b5b600182019050919050565b600061152982611129565b915061153483611129565b925082820190508082111561154c5761154b6113a2565b5b92915050565b600060408201905061156760008301856111d5565b61157460208301846111d5565b9392505050565b7f546f6b656e7320617265207374696c6c206c6f636b6564000000000000000000600082015250565b60006115b160178361101f565b91506115bc8261157b565b602082019050919050565b600060208201905081810360008301526115e0816115a4565b9050919050565b7f417070726f76652066726f6d20746865207a65726f2061646472657373000000600082015250565b600061161d601d8361101f565b9150611628826115e7565b602082019050919050565b6000602082019050818103600083015261164c81611610565b9050919050565b7f417070726f766520746f20746865207a65726f20616464726573730000000000600082015250565b6000611689601b8361101f565b915061169482611653565b602082019050919050565b600060208201905081810360008301526116b88161167c565b9050919050565b7f5472616e736665722066726f6d20746865207a65726f20616464726573730000600082015250565b60006116f5601e8361101f565b9150611700826116bf565b602082019050919050565b60006020820190508181036000830152611724816116e8565b9050919050565b7f5472616e7366657220746f20746865207a65726f206164647265737300000000600082015250565b6000611761601c8361101f565b915061176c8261172b565b602082019050919050565b6000602082019050818103600083015261179081611754565b905091905056fea26469706673582212201ecd5ae8de9632041b13e528fe6e058d14d57556cec5869dbe03a7f9d51a185f64736f6c6343000812003300000000000000000000000000000000000000000000000000005af3107a4000