60806040525f60075f6101000a81548160ff02191690831515021790555061002b6104fa60201b60201c565b600a6100379190610943565b612710610044919061098d565b6010556040518060a0016040528073d6cdd2a57f56557043216f7d6965ee66a2e18fd573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001732808f8f17ca7a7c01d7f7d32af4005bd53bfff4f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001738f41edb8c38707ce34ac5f13dba9f43f81891c9573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020017371b065bc8900dba1864c9cdf4fb5a1562cca562773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200173d5f00d35b0db078fa58fcd6e0ed6a116c6487d8173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681525060119060056101be929190610730565b503480156101ca575f80fd5b5060405161503638038061503683398181016040528101906101ec91906109fc565b6040518060400160405280601281526020017f48756d616e2046757475726520546f6b656e00000000000000000000000000008152506040518060400160405280600381526020017f484d46000000000000000000000000000000000000000000000000000000000081525081600390816102679190610c91565b5080600490816102779190610c91565b50505061029661028b61050260201b60201c565b61050960201b60201c565b606483856102a49190610d60565b11156102e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102dc90610ded565b60405180910390fd5b5f60648569021e19e0c9bab24000006102fe919061098d565b6103089190610e38565b90505f60648569021e19e0c9bab2400000610323919061098d565b61032d9190610e38565b90505f818369021e19e0c9bab24000006103479190610e68565b6103519190610e68565b905061036333846105cc60201b60201c565b5f60118054905090505f81116103ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103a590610ee5565b60405180910390fd5b5f81846103bb9190610e38565b90505f5b828110156104a857610412601182815481106103de576103dd610f03565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836105cc60201b60201c565b6011818154811061042657610425610f03565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f9b1f700be023963f34e70cfc6b4905af7287023ccc5d0e4b5eb968684187d4c4836040516104939190610faf565b60405180910390a280806001019150506103bf565b506104b930846105cc60201b60201c565b6301e13380876104c9919061098d565b426104d49190610d60565b60068190555085426104e69190610d60565b600b8190555050505050505050505061105c565b5f6012905090565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361063a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161063190611025565b60405180910390fd5b61064b5f838361072660201b60201c565b8060025f82825461065c9190610d60565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107099190611043565b60405180910390a36107225f838361072b60201b60201c565b5050565b505050565b505050565b828054828255905f5260205f209081019282156107a6579160200282015b828111156107a5578251825f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509160200191906001019061074e565b5b5090506107b391906107b7565b5090565b5b808211156107ce575f815f9055506001016107b8565b5090565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b6001851115610854578086048111156108305761082f6107d2565b5b600185161561083f5780820291505b808102905061084d856107ff565b9450610814565b94509492505050565b5f8261086c5760019050610927565b81610879575f9050610927565b816001811461088f5760028114610899576108c8565b6001915050610927565b60ff8411156108ab576108aa6107d2565b5b8360020a9150848211156108c2576108c16107d2565b5b50610927565b5060208310610133831016604e8410600b84101617156108fd5782820a9050838111156108f8576108f76107d2565b5b610927565b61090a848484600161080b565b92509050818404811115610921576109206107d2565b5b81810290505b9392505050565b5f819050919050565b5f60ff82169050919050565b5f61094d8261092e565b915061095883610937565b92506109857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848461085d565b905092915050565b5f6109978261092e565b91506109a28361092e565b92508282026109b08161092e565b915082820484148315176109c7576109c66107d2565b5b5092915050565b5f80fd5b6109db8161092e565b81146109e5575f80fd5b50565b5f815190506109f6816109d2565b92915050565b5f805f8060808587031215610a1457610a136109ce565b5b5f610a21878288016109e8565b9450506020610a32878288016109e8565b9350506040610a43878288016109e8565b9250506060610a54878288016109e8565b91505092959194509250565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680610adb57607f821691505b602082108103610aee57610aed610a97565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302610b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610b15565b610b5a8683610b15565b95508019841693508086168417925050509392505050565b5f819050919050565b5f610b95610b90610b8b8461092e565b610b72565b61092e565b9050919050565b5f819050919050565b610bae83610b7b565b610bc2610bba82610b9c565b848454610b21565b825550505050565b5f90565b610bd6610bca565b610be1818484610ba5565b505050565b5b81811015610c0457610bf95f82610bce565b600181019050610be7565b5050565b601f821115610c4957610c1a81610af4565b610c2384610b06565b81016020851015610c32578190505b610c46610c3e85610b06565b830182610be6565b50505b505050565b5f82821c905092915050565b5f610c695f1984600802610c4e565b1980831691505092915050565b5f610c818383610c5a565b9150826002028217905092915050565b610c9a82610a60565b67ffffffffffffffff811115610cb357610cb2610a6a565b5b610cbd8254610ac4565b610cc8828285610c08565b5f60209050601f831160018114610cf9575f8415610ce7578287015190505b610cf18582610c76565b865550610d58565b601f198416610d0786610af4565b5f5b82811015610d2e57848901518255600182019150602085019450602081019050610d09565b86831015610d4b5784890151610d47601f891682610c5a565b8355505b6001600288020188555050505b505050505050565b5f610d6a8261092e565b9150610d758361092e565b9250828201905080821115610d8d57610d8c6107d2565b5b92915050565b5f82825260208201905092915050565b7f546f74616c20726174696f2065786365656473203130300000000000000000005f82015250565b5f610dd7601783610d93565b9150610de282610da3565b602082019050919050565b5f6020820190508181035f830152610e0481610dcb565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f610e428261092e565b9150610e4d8361092e565b925082610e5d57610e5c610e0b565b5b828204905092915050565b5f610e728261092e565b9150610e7d8361092e565b9250828203905081811115610e9557610e946107d2565b5b92915050565b7f4e6f206169722064726f7020726563697069656e747320646566696e656400005f82015250565b5f610ecf601e83610d93565b9150610eda82610e9b565b602082019050919050565b5f6020820190508181035f830152610efc81610ec3565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b610f398161092e565b82525050565b7f496e697469616c2061697264726f7020647572696e6720636f6e7472616374205f8201527f6465706c6f796d656e7400000000000000000000000000000000000000000000602082015250565b5f610f99602a83610d93565b9150610fa482610f3f565b604082019050919050565b5f604082019050610fc25f830184610f30565b8181036020830152610fd381610f8d565b905092915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f61100f601f83610d93565b915061101a82610fdb565b602082019050919050565b5f6020820190508181035f83015261103c81611003565b9050919050565b5f6020820190506110565f830184610f30565b92915050565b613fcd806110695f395ff3fe608060405260043610610249575f3560e01c806385fba40f11610138578063b756ad78116100b5578063e35568cb11610079578063e35568cb146108d6578063e47224a114610900578063f2fde38b1461093c578063f5a31fd714610964578063f645671f1461098e578063f751758b146109b85761029e565b8063b756ad7814610806578063cd5950991461082e578063d1632ded1461084a578063dc048cf214610872578063dd62ed3e1461089a5761029e565b80639a5c4850116100fc5780639a5c4850146107125780639c76a6ac1461073c578063a457c2d714610766578063a9059cbb146107a2578063af7472dc146107de5761029e565b806385fba40f146106305780638da5cb5b14610658578063902d55a51461068257806395016626146106ac57806395d89b41146106e85761029e565b80635281bbe9116101c65780637287ef581161018a5780637287ef581461054e57806379f06bfb146105765780637a002304146105a0578063808c48a8146105ca5780638391e45c146105f45761029e565b80635281bbe91461048c57806357715207146104b65780636f85e62c146104e057806370a08231146104fc578063715018a6146105385761029e565b80632a30591e1161020d5780632a30591e14610398578063313ce567146103c257806339509351146103ec578063409caca3146104285780634392c3c7146104505761029e565b806306fdde03146102a2578063095ea7b3146102cc57806311c70c731461030857806318160ddd1461033257806323b872dd1461035c5761029e565b3661029e57600654421115610293576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161028a9061275c565b60405180910390fd5b61029c346109e2565b005b5f80fd5b3480156102ad575f80fd5b506102b6610abe565b6040516102c391906127da565b60405180910390f35b3480156102d7575f80fd5b506102f260048036038101906102ed9190612898565b610b4e565b6040516102ff91906128f0565b60405180910390f35b348015610313575f80fd5b5061031c610b70565b6040516103299190612918565b60405180910390f35b34801561033d575f80fd5b50610346610b76565b6040516103539190612918565b60405180910390f35b348015610367575f80fd5b50610382600480360381019061037d9190612931565b610b7f565b60405161038f91906128f0565b60405180910390f35b3480156103a3575f80fd5b506103ac610bad565b6040516103b99190612918565b60405180910390f35b3480156103cd575f80fd5b506103d6610bb3565b6040516103e3919061299c565b60405180910390f35b3480156103f7575f80fd5b50610412600480360381019061040d9190612898565b610bbb565b60405161041f91906128f0565b60405180910390f35b348015610433575f80fd5b5061044e60048036038101906104499190612ae1565b610bf1565b005b34801561045b575f80fd5b5061047660048036038101906104719190612b28565b610ca0565b6040516104839190612b62565b60405180910390f35b348015610497575f80fd5b506104a0610cdb565b6040516104ad9190612918565b60405180910390f35b3480156104c1575f80fd5b506104ca610ce1565b6040516104d79190612918565b60405180910390f35b6104fa60048036038101906104f59190612ae1565b610ce7565b005b348015610507575f80fd5b50610522600480360381019061051d9190612b7b565b610eff565b60405161052f9190612918565b60405180910390f35b348015610543575f80fd5b5061054c610f44565b005b348015610559575f80fd5b50610574600480360381019061056f9190612ae1565b610f57565b005b348015610581575f80fd5b5061058a6110bd565b6040516105979190612918565b60405180910390f35b3480156105ab575f80fd5b506105b46110c3565b6040516105c19190612918565b60405180910390f35b3480156105d5575f80fd5b506105de6110c9565b6040516105eb9190612918565b60405180910390f35b3480156105ff575f80fd5b5061061a60048036038101906106159190612b7b565b6110cf565b6040516106279190612918565b60405180910390f35b34801561063b575f80fd5b5061065660048036038101906106519190612ba6565b6111fe565b005b348015610663575f80fd5b5061066c6112d2565b6040516106799190612b62565b60405180910390f35b34801561068d575f80fd5b506106966112fa565b6040516106a39190612918565b60405180910390f35b3480156106b7575f80fd5b506106d260048036038101906106cd9190612b7b565b611308565b6040516106df9190612918565b60405180910390f35b3480156106f3575f80fd5b506106fc61131d565b60405161070991906127da565b60405180910390f35b34801561071d575f80fd5b506107266113ad565b6040516107339190612918565b60405180910390f35b348015610747575f80fd5b506107506113b3565b60405161075d9190612918565b60405180910390f35b348015610771575f80fd5b5061078c60048036038101906107879190612898565b6113b9565b60405161079991906128f0565b60405180910390f35b3480156107ad575f80fd5b506107c860048036038101906107c39190612898565b61142e565b6040516107d591906128f0565b60405180910390f35b3480156107e9575f80fd5b5061080460048036038101906107ff9190612ae1565b611450565b005b348015610811575f80fd5b5061082c60048036038101906108279190612ba6565b611587565b005b61084860048036038101906108439190612c00565b6117d2565b005b348015610855575f80fd5b50610870600480360381019061086b9190612ae1565b6119a4565b005b34801561087d575f80fd5b5061089860048036038101906108939190612ba6565b611a4d565b005b3480156108a5575f80fd5b506108c060048036038101906108bb9190612c6c565b611bc2565b6040516108cd9190612918565b60405180910390f35b3480156108e1575f80fd5b506108ea611c44565b6040516108f79190612918565b60405180910390f35b34801561090b575f80fd5b5061092660048036038101906109219190612b7b565b611c53565b6040516109339190612918565b60405180910390f35b348015610947575f80fd5b50610962600480360381019061095d9190612b7b565b611c68565b005b34801561096f575f80fd5b50610978611cea565b60405161098591906128f0565b60405180910390f35b348015610999575f80fd5b506109a2611cfc565b6040516109af9190612918565b60405180910390f35b3480156109c3575f80fd5b506109cc611d02565b6040516109d99190612918565b60405180910390f35b5f6109ec30610eff565b6109f4610b76565b6109fe9190612cd7565b90505f8111610a42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3990612d54565b60405180910390fd5b80610a4b610bb3565b600a610a579190612ea1565b83610a629190612eeb565b610a6c9190612f59565b600c5f828254610a7c9190612f89565b925050819055507f5e78846c764f3852ae8409720fedec20c62430d9623d14f22483892ae90db22182604051610ab29190613006565b60405180910390a15050565b606060038054610acd9061305f565b80601f0160208091040260200160405190810160405280929190818152602001828054610af99061305f565b8015610b445780601f10610b1b57610100808354040283529160200191610b44565b820191905f5260205f20905b815481529060010190602001808311610b2757829003601f168201915b5050505050905090565b5f80610b58611d10565b9050610b65818585611d17565b600191505092915050565b600c5481565b5f600254905090565b5f80610b89611d10565b9050610b96858285611eda565b610ba1858585611f65565b60019150509392505050565b600f5481565b5f6012905090565b5f80610bc5611d10565b9050610be6818585610bd78589611bc2565b610be19190612f89565b611d17565b600191505092915050565b61010081511115610c37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2e906130d9565b60405180910390fd5b610c4033611f87565b5f610c4a336110cf565b90503373ffffffffffffffffffffffffffffffffffffffff167ff2eea168d7d8b1c8239e86e6b39d3d9aca12eceee823c7d1c249c6352c9318308284604051610c949291906130f7565b60405180910390a25050565b60118181548110610caf575f80fd5b905f5260205f20015f915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b5481565b60105481565b61010081511115610d2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d24906130d9565b60405180910390fd5b5f610d36611d02565b90505f8111610d7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7190613195565b60405180910390fd5b5f81610d84610bb3565b600a610d909190612ea1565b34610d9b9190612eeb565b610da59190612f59565b90505f8111610de9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de090613223565b60405180910390fd5b601054811115610e2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e25906132b1565b60405180910390fd5b5f610e3830610eff565b905080821115610e7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7490613319565b60405180910390fd5b610e8633611f87565b610e91303384611f65565b34600f5f828254610ea29190612f89565b925050819055503373ffffffffffffffffffffffffffffffffffffffff167f5c2faa713f6ffaa04dd62e2d8b66d3b0f2427b0b7c3b5f86737cf4085bb4bda28386604051610ef19291906130f7565b60405180910390a250505050565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610f4c612162565b610f555f6121e0565b565b610f5f612162565b60075f9054906101000a900460ff1615610fae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa590613381565b60405180910390fd5b61010081511115610ff4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610feb906130d9565b60405180910390fd5b5f60135490505f60125490505f8211156110225761101a306110146112d2565b84611f65565b5f6013819055505b5f81111561107d576110326112d2565b73ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015611074573d5f803e3d5ffd5b505f6012819055505b7f2eec05f4f1e4161d6d2f6def66845ae462a5a98402dc9dab440b1290258873a88282856040516110b09392919061339f565b60405180910390a1505050565b60135481565b60065481565b60125481565b5f80600c5490505f600d5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905080821161116557600e5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054925050506111f9565b5f81836111729190612cd7565b90505f61117d610bb3565b600a6111899190612ea1565b8261119388610eff565b61119d9190612eeb565b6111a79190612f59565b9050600e5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054816111f29190612f89565b9450505050505b919050565b611206612162565b5f8211611248576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123f9061344b565b60405180910390fd5b6101008151111561128e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611285906130d9565b60405180910390fd5b816010819055507ff7481475cdfcd96860e6df18e220788cf599697ee2ad3b0bc214c35321d6561b82826040516112c69291906130f7565b60405180910390a15050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b69021e19e0c9bab240000081565b600e602052805f5260405f205f915090505481565b60606004805461132c9061305f565b80601f01602080910402602001604051908101604052809291908181526020018280546113589061305f565b80156113a35780601f1061137a576101008083540402835291602001916113a3565b820191905f5260205f20905b81548152906001019060200180831161138657829003601f168201915b5050505050905090565b60085481565b60095481565b5f806113c3611d10565b90505f6113d08286611bc2565b905083811015611415576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140c906134d9565b60405180910390fd5b6114228286868403611d17565b60019250505092915050565b5f80611438611d10565b9050611445818585611f65565b600191505092915050565b600b54421015611495576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148c90613541565b60405180910390fd5b610100815111156114db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d2906130d9565b60405180910390fd5b5f6114e533610eff565b90505f8111611529576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611520906135a9565b60405180910390fd5b61153333826122a3565b3373ffffffffffffffffffffffffffffffffffffffff167ffad31924d655455395c87544c8aa1ffdb5a7505a22a3c2e03f28003b6556a75f828460405161157b9291906130f7565b60405180910390a25050565b60075f9054906101000a900460ff166115d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115cc90613611565b60405180910390fd5b5f8211611617576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160e90613679565b60405180910390fd5b60085482600a546116289190612f89565b1115611669576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611660906136e1565b60405180910390fd5b5f611672610bb3565b600a61167e9190612ea1565b6009548461168c9190612eeb565b6116969190612f59565b90508060125410156116dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d490613749565b60405180910390fd5b82600a5f8282546116ee9190612f89565b925050819055508260135f8282546117069190612f89565b925050819055508060125f82825461171e9190612cd7565b9250508190555061172e33611f87565b611739333085611f65565b3373ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f1935050505015801561177c573d5f803e3d5ffd5b503373ffffffffffffffffffffffffffffffffffffffff167fcdd91800c85452349bd56ba3278276e7985a73f6981194459f219a6250734f5e84846040516117c59291906130f7565b60405180910390a2505050565b6117da612162565b60075f9054906101000a900460ff1615611829576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611820906137b1565b60405180910390fd5b5f831161186b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118629061383f565b60405180910390fd5b5f82116118ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a4906138cd565b60405180910390fd5b5f6118b6610bb3565b600a6118c29190612ea1565b83856118ce9190612eeb565b6118d89190612f59565b905080341461191c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119139061395b565b60405180910390fd5b83600881905550826009819055505f600a81905550600160075f6101000a81548160ff0219169083151502179055503460125f82825461195c9190612f89565b925050819055507fa4bd0d5aaf39025364bd0bf02e3a1d8f7d8cc8c8f401b3851a6bcb30119576618484846040516119969392919061339f565b60405180910390a150505050565b6119ac612162565b60075f9054906101000a900460ff166119fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f190613611565b60405180910390fd5b5f60075f6101000a81548160ff0219169083151502179055507fc2ae6ff131e786dc69929d5a0fd9b965a4854642b0efd296d47d74552c92bda581604051611a4291906127da565b60405180910390a150565b611a55612162565b600f54821115611a9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a91906139c3565b60405180910390fd5b5f8211611adc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad390613679565b60405180910390fd5b61010081511115611b22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b19906130d9565b60405180910390fd5b81600f5f828254611b339190612cd7565b92505081905550611b426112d2565b73ffffffffffffffffffffffffffffffffffffffff166108fc8390811502906040515f60405180830381858888f19350505050158015611b84573d5f803e3d5ffd5b507f294f4eca3566840efd0fe4451d539da734104020ed1588450bde20ad1bb00ed98282604051611bb69291906130f7565b60405180910390a15050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f611c4e30610eff565b905090565b600d602052805f5260405f205f915090505481565b611c70612162565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611cde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd590613a51565b60405180910390fd5b611ce7816121e0565b50565b60075f9054906101000a900460ff1681565b600a5481565b5f662386f26fc10000905090565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611d85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7c90613adf565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611df3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dea90613b6d565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611ecd9190612918565b60405180910390a3505050565b5f611ee58484611bc2565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611f5f5781811015611f51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4890613bd5565b60405180910390fd5b611f5e8484848403611d17565b5b50505050565b611f6e83611f87565b611f7782611f87565b611f82838383612466565b505050565b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16031561215f575f611fc5826110cf565b90505f81111561211857600c54600d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505f4790505f8183116120255782612027565b815b90505f8111156120c4578373ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015612074573d5f803e3d5ffd5b508373ffffffffffffffffffffffffffffffffffffffff167ff2eea168d7d8b1c8239e86e6b39d3d9aca12eceee823c7d1c249c6352c931830826040516120bb9190613c3d565b60405180910390a25b80836120d09190612cd7565b600e5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505061215d565b600c54600d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b505b50565b61216a611d10565b73ffffffffffffffffffffffffffffffffffffffff166121886112d2565b73ffffffffffffffffffffffffffffffffffffffff16146121de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d590613cb3565b60405180910390fd5b565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612311576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230890613d41565b60405180910390fd5b61231c825f836126d2565b5f805f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508181101561239f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239690613dcf565b60405180910390fd5b8181035f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508160025f82825403925050819055505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161244e9190612918565b60405180910390a3612461835f846126d7565b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036124d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124cb90613e5d565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612542576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253990613eeb565b60405180910390fd5b61254d8383836126d2565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156125d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125c790613f79565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516126b99190612918565b60405180910390a36126cc8484846126d7565b50505050565b505050565b505050565b5f82825260208201905092915050565b7f496e636f6d6520646973747269627574696f6e20706572696f642068617320655f8201527f6e64656400000000000000000000000000000000000000000000000000000000602082015250565b5f6127466024836126dc565b9150612751826126ec565b604082019050919050565b5f6020820190508181035f8301526127738161273a565b9050919050565b5f81519050919050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f6127ac8261277a565b6127b681856126dc565b93506127c6818560208601612784565b6127cf81612792565b840191505092915050565b5f6020820190508181035f8301526127f281846127a2565b905092915050565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6128348261280b565b9050919050565b6128448161282a565b811461284e575f80fd5b50565b5f8135905061285f8161283b565b92915050565b5f819050919050565b61287781612865565b8114612881575f80fd5b50565b5f813590506128928161286e565b92915050565b5f80604083850312156128ae576128ad612803565b5b5f6128bb85828601612851565b92505060206128cc85828601612884565b9150509250929050565b5f8115159050919050565b6128ea816128d6565b82525050565b5f6020820190506129035f8301846128e1565b92915050565b61291281612865565b82525050565b5f60208201905061292b5f830184612909565b92915050565b5f805f6060848603121561294857612947612803565b5b5f61295586828701612851565b935050602061296686828701612851565b925050604061297786828701612884565b9150509250925092565b5f60ff82169050919050565b61299681612981565b82525050565b5f6020820190506129af5f83018461298d565b92915050565b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6129f382612792565b810181811067ffffffffffffffff82111715612a1257612a116129bd565b5b80604052505050565b5f612a246127fa565b9050612a3082826129ea565b919050565b5f67ffffffffffffffff821115612a4f57612a4e6129bd565b5b612a5882612792565b9050602081019050919050565b828183375f83830152505050565b5f612a85612a8084612a35565b612a1b565b905082815260208101848484011115612aa157612aa06129b9565b5b612aac848285612a65565b509392505050565b5f82601f830112612ac857612ac76129b5565b5b8135612ad8848260208601612a73565b91505092915050565b5f60208284031215612af657612af5612803565b5b5f82013567ffffffffffffffff811115612b1357612b12612807565b5b612b1f84828501612ab4565b91505092915050565b5f60208284031215612b3d57612b3c612803565b5b5f612b4a84828501612884565b91505092915050565b612b5c8161282a565b82525050565b5f602082019050612b755f830184612b53565b92915050565b5f60208284031215612b9057612b8f612803565b5b5f612b9d84828501612851565b91505092915050565b5f8060408385031215612bbc57612bbb612803565b5b5f612bc985828601612884565b925050602083013567ffffffffffffffff811115612bea57612be9612807565b5b612bf685828601612ab4565b9150509250929050565b5f805f60608486031215612c1757612c16612803565b5b5f612c2486828701612884565b9350506020612c3586828701612884565b925050604084013567ffffffffffffffff811115612c5657612c55612807565b5b612c6286828701612ab4565b9150509250925092565b5f8060408385031215612c8257612c81612803565b5b5f612c8f85828601612851565b9250506020612ca085828601612851565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f612ce182612865565b9150612cec83612865565b9250828203905081811115612d0457612d03612caa565b5b92915050565b7f4e6f20746f6b656e7320696e2063697263756c6174696f6e00000000000000005f82015250565b5f612d3e6018836126dc565b9150612d4982612d0a565b602082019050919050565b5f6020820190508181035f830152612d6b81612d32565b9050919050565b5f8160011c9050919050565b5f808291508390505b6001851115612dc757808604811115612da357612da2612caa565b5b6001851615612db25780820291505b8081029050612dc085612d72565b9450612d87565b94509492505050565b5f82612ddf5760019050612e9a565b81612dec575f9050612e9a565b8160018114612e025760028114612e0c57612e3b565b6001915050612e9a565b60ff841115612e1e57612e1d612caa565b5b8360020a915084821115612e3557612e34612caa565b5b50612e9a565b5060208310610133831016604e8410600b8410161715612e705782820a905083811115612e6b57612e6a612caa565b5b612e9a565b612e7d8484846001612d7e565b92509050818404811115612e9457612e93612caa565b5b81810290505b9392505050565b5f612eab82612865565b9150612eb683612981565b9250612ee37fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484612dd0565b905092915050565b5f612ef582612865565b9150612f0083612865565b9250828202612f0e81612865565b91508282048414831517612f2557612f24612caa565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f612f6382612865565b9150612f6e83612865565b925082612f7e57612f7d612f2c565b5b828204905092915050565b5f612f9382612865565b9150612f9e83612865565b9250828201905080821115612fb657612fb5612caa565b5b92915050565b7f4469766964656e647320646973747269627574656400000000000000000000005f82015250565b5f612ff06015836126dc565b9150612ffb82612fbc565b602082019050919050565b5f6040820190506130195f830184612909565b818103602083015261302a81612fe4565b905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061307657607f821691505b60208210810361308957613088613032565b5b50919050565b7f52656d61726b20746f6f206c6f6e6700000000000000000000000000000000005f82015250565b5f6130c3600f836126dc565b91506130ce8261308f565b602082019050919050565b5f6020820190508181035f8301526130f0816130b7565b9050919050565b5f60408201905061310a5f830185612909565b818103602083015261311c81846127a2565b90509392505050565b7f546f6b656e207072696365206d7573742062652067726561746572207468616e5f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f61317f6025836126dc565b915061318a82613125565b604082019050919050565b5f6020820190508181035f8301526131ac81613173565b9050919050565b7f416d6f756e7420746f20627579206d75737420626520677265617465722074685f8201527f616e207a65726f00000000000000000000000000000000000000000000000000602082015250565b5f61320d6027836126dc565b9150613218826131b3565b604082019050919050565b5f6020820190508181035f83015261323a81613201565b9050919050565b7f45786365656473206d6178696d756d20746f6b656e73207065722070757263685f8201527f6173650000000000000000000000000000000000000000000000000000000000602082015250565b5f61329b6023836126dc565b91506132a682613241565b604082019050919050565b5f6020820190508181035f8301526132c88161328f565b9050919050565b7f4e6f7420656e6f75676820746f6b656e7320617661696c61626c6500000000005f82015250565b5f613303601b836126dc565b915061330e826132cf565b602082019050919050565b5f6020820190508181035f830152613330816132f7565b9050919050565b7f4275796261636b206973207374696c6c206163746976650000000000000000005f82015250565b5f61336b6017836126dc565b915061337682613337565b602082019050919050565b5f6020820190508181035f8301526133988161335f565b9050919050565b5f6060820190506133b25f830186612909565b6133bf6020830185612909565b81810360408301526133d181846127a2565b9050949350505050565b7f4d617820746f6b656e7320706572207075726368617365206d757374206265205f8201527f67726561746572207468616e207a65726f000000000000000000000000000000602082015250565b5f6134356031836126dc565b9150613440826133db565b604082019050919050565b5f6020820190508181035f83015261346281613429565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f6134c36025836126dc565b91506134ce82613469565b604082019050919050565b5f6020820190508181035f8301526134f0816134b7565b9050919050565b7f436f6e747261637420686173206e6f74206578706972656420796574000000005f82015250565b5f61352b601c836126dc565b9150613536826134f7565b602082019050919050565b5f6020820190508181035f8301526135588161351f565b9050919050565b7f4e6f20746f6b656e7320746f206275726e0000000000000000000000000000005f82015250565b5f6135936011836126dc565b915061359e8261355f565b602082019050919050565b5f6020820190508181035f8301526135c081613587565b9050919050565b7f4275796261636b206973206e6f742061637469766500000000000000000000005f82015250565b5f6135fb6015836126dc565b9150613606826135c7565b602082019050919050565b5f6020820190508181035f830152613628816135ef565b9050919050565b7f416d6f756e74206d7573742062652067726561746572207468616e207a65726f5f82015250565b5f6136636020836126dc565b915061366e8261362f565b602082019050919050565b5f6020820190508181035f83015261369081613657565b9050919050565b7f4275796261636b20746f6b656e206c696d6974206578636565646564000000005f82015250565b5f6136cb601c836126dc565b91506136d682613697565b602082019050919050565b5f6020820190508181035f8301526136f8816136bf565b9050919050565b7f496e73756666696369656e74206275796261636b2066756e64730000000000005f82015250565b5f613733601a836126dc565b915061373e826136ff565b602082019050919050565b5f6020820190508181035f83015261376081613727565b9050919050565b7f4275796261636b20616c726561647920616374697665000000000000000000005f82015250565b5f61379b6016836126dc565b91506137a682613767565b602082019050919050565b5f6020820190508181035f8301526137c88161378f565b9050919050565b7f546f6b656e20616d6f756e74206d7573742062652067726561746572207468615f8201527f6e207a65726f0000000000000000000000000000000000000000000000000000602082015250565b5f6138296026836126dc565b9150613834826137cf565b604082019050919050565b5f6020820190508181035f8301526138568161381d565b9050919050565b7f4275796261636b207072696365206d75737420626520677265617465722074685f8201527f616e207a65726f00000000000000000000000000000000000000000000000000602082015250565b5f6138b76027836126dc565b91506138c28261385d565b604082019050919050565b5f6020820190508181035f8301526138e4816138ab565b9050919050565b7f496e636f72726563742045544820616d6f756e742073656e7420666f722062755f8201527f796261636b000000000000000000000000000000000000000000000000000000602082015250565b5f6139456025836126dc565b9150613950826138eb565b604082019050919050565b5f6020820190508181035f83015261397281613939565b9050919050565b7f416d6f756e74206578636565647320617661696c61626c652066756e647300005f82015250565b5f6139ad601e836126dc565b91506139b882613979565b602082019050919050565b5f6020820190508181035f8301526139da816139a1565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f613a3b6026836126dc565b9150613a46826139e1565b604082019050919050565b5f6020820190508181035f830152613a6881613a2f565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f613ac96024836126dc565b9150613ad482613a6f565b604082019050919050565b5f6020820190508181035f830152613af681613abd565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f613b576022836126dc565b9150613b6282613afd565b604082019050919050565b5f6020820190508181035f830152613b8481613b4b565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000005f82015250565b5f613bbf601d836126dc565b9150613bca82613b8b565b602082019050919050565b5f6020820190508181035f830152613bec81613bb3565b9050919050565b7f4469766964656e647320636c61696d65640000000000000000000000000000005f82015250565b5f613c276011836126dc565b9150613c3282613bf3565b602082019050919050565b5f604082019050613c505f830184612909565b8181036020830152613c6181613c1b565b905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613c9d6020836126dc565b9150613ca882613c69565b602082019050919050565b5f6020820190508181035f830152613cca81613c91565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f206164647265735f8201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b5f613d2b6021836126dc565b9150613d3682613cd1565b604082019050919050565b5f6020820190508181035f830152613d5881613d1f565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e5f8201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b5f613db96022836126dc565b9150613dc482613d5f565b604082019050919050565b5f6020820190508181035f830152613de681613dad565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f613e476025836126dc565b9150613e5282613ded565b604082019050919050565b5f6020820190508181035f830152613e7481613e3b565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f613ed56023836126dc565b9150613ee082613e7b565b604082019050919050565b5f6020820190508181035f830152613f0281613ec9565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f613f636026836126dc565b9150613f6e82613f09565b604082019050919050565b5f6020820190508181035f830152613f9081613f57565b905091905056fea26469706673582212201a24e84f6aecf751c71e2134dbe472e20a3240419882b09fe110cc84d6ee0ae264736f6c634300081a0033000000000000000000000000000000000000000000000000000000000000003c00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000005000000000000000000000000000000000000000000000000000000000b473500