60806040526045600b556001600c55348015610019575f5ffd5b50336040518060400160405280601481526020017f506f776572636f696e205469636b6574204e46540000000000000000000000008152506040518060400160405280600381526020017f504354000000000000000000000000000000000000000000000000000000000081525081600290816100969190610664565b5080600390816100a69190610664565b5050505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610119575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016101109190610772565b60405180910390fd5b6101288161017f60201b60201c565b505f600860146101000a81548160ff021916908315150217905550600160098190555061016a61015c61024260201b60201c565b6103e861026a60201b60201c565b61017a600a61040a60201b60201c565b610808565b5f60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f61027961041e60201b60201c565b6bffffffffffffffffffffffff16905080826bffffffffffffffffffffffff1611156102de5781816040517f6f483d090000000000000000000000000000000000000000000000000000000081526004016102d59291906107e1565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361034e575f6040517fb6d9900a0000000000000000000000000000000000000000000000000000000081526004016103459190610772565b60405180910390fd5b60405180604001604052808473ffffffffffffffffffffffffffffffffffffffff168152602001836bffffffffffffffffffffffff168152505f5f820151815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151815f0160146101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff160217905550905050505050565b6001815f015f828254019250508190555050565b5f612710905090565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806104a257607f821691505b6020821081036104b5576104b461045e565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026105177fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826104dc565b61052186836104dc565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f61056561056061055b84610539565b610542565b610539565b9050919050565b5f819050919050565b61057e8361054b565b61059261058a8261056c565b8484546104e8565b825550505050565b5f5f905090565b6105a961059a565b6105b4818484610575565b505050565b5b818110156105d7576105cc5f826105a1565b6001810190506105ba565b5050565b601f82111561061c576105ed816104bb565b6105f6846104cd565b81016020851015610605578190505b610619610611856104cd565b8301826105b9565b50505b505050565b5f82821c905092915050565b5f61063c5f1984600802610621565b1980831691505092915050565b5f610654838361062d565b9150826002028217905092915050565b61066d82610427565b67ffffffffffffffff81111561068657610685610431565b5b610690825461048b565b61069b8282856105db565b5f60209050601f8311600181146106cc575f84156106ba578287015190505b6106c48582610649565b86555061072b565b601f1984166106da866104bb565b5f5b82811015610701578489015182556001820191506020850194506020810190506106dc565b8683101561071e578489015161071a601f89168261062d565b8355505b6001600288020188555050505b505050505050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61075c82610733565b9050919050565b61076c81610752565b82525050565b5f6020820190506107855f830184610763565b92915050565b5f6bffffffffffffffffffffffff82169050919050565b5f6107bc6107b76107b28461078b565b610542565b610539565b9050919050565b6107cc816107a2565b82525050565b6107db81610539565b82525050565b5f6040820190506107f45f8301856107c3565b61080160208301846107d2565b9392505050565b614b09806108155f395ff3fe6080604052600436106101b6575f3560e01c806370f4c343116100eb5780639ef01f9411610089578063c002d23d11610063578063c002d23d146105fb578063c87b56dd14610625578063e985e9c514610661578063f2fde38b1461069d576101b6565b80639ef01f941461056e578063a22cb465146105ab578063b88d4fde146105d3576101b6565b80638456cb59116100c55780638456cb59146104c85780638da5cb5b146104de57806395d89b41146105085780639bb022b914610532576101b6565b806370f4c3431461044b578063715018a6146104755780637dc379fa1461048b576101b6565b80633f4ba83a116101585780636026a632116101325780636026a6321461037b5780636352211e146103b757806366c9764a146103f357806370a082311461040f576101b6565b80633f4ba83a1461031357806342842e0e146103295780635c975abb14610351576101b6565b8063095ea7b311610194578063095ea7b31461025c57806323b872dd1461028457806324205d77146102ac5780632a55205a146102d6576101b6565b806301ffc9a7146101ba57806306fdde03146101f6578063081812fc14610220575b5f5ffd5b3480156101c5575f5ffd5b506101e060048036038101906101db9190612aab565b6106c5565b6040516101ed9190612af0565b60405180910390f35b348015610201575f5ffd5b5061020a6106d6565b6040516102179190612b79565b60405180910390f35b34801561022b575f5ffd5b5061024660048036038101906102419190612bcc565b610766565b6040516102539190612c36565b60405180910390f35b348015610267575f5ffd5b50610282600480360381019061027d9190612c79565b610781565b005b34801561028f575f5ffd5b506102aa60048036038101906102a59190612cb7565b610797565b005b3480156102b7575f5ffd5b506102c0610896565b6040516102cd9190612d16565b60405180910390f35b3480156102e1575f5ffd5b506102fc60048036038101906102f79190612d2f565b61089c565b60405161030a929190612d6d565b60405180910390f35b34801561031e575f5ffd5b506103276109bc565b005b348015610334575f5ffd5b5061034f600480360381019061034a9190612cb7565b6109ce565b005b34801561035c575f5ffd5b506103656109ed565b6040516103729190612af0565b60405180910390f35b348015610386575f5ffd5b506103a1600480360381019061039c9190612ec2565b610a03565b6040516103ae9190612d16565b60405180910390f35b3480156103c2575f5ffd5b506103dd60048036038101906103d89190612bcc565b610a37565b6040516103ea9190612c36565b60405180910390f35b61040d60048036038101906104089190612ec2565b610a48565b005b34801561041a575f5ffd5b5061043560048036038101906104309190612eed565b610d13565b6040516104429190612d16565b60405180910390f35b348015610456575f5ffd5b5061045f610dc9565b60405161046c9190612d16565b60405180910390f35b348015610480575f5ffd5b50610489610dcf565b005b348015610496575f5ffd5b506104b160048036038101906104ac9190612bcc565b610de2565b6040516104bf929190612fbd565b60405180910390f35b3480156104d3575f5ffd5b506104dc610ec6565b005b3480156104e9575f5ffd5b506104f2610ed8565b6040516104ff9190612c36565b60405180910390f35b348015610513575f5ffd5b5061051c610f00565b6040516105299190612b79565b60405180910390f35b34801561053d575f5ffd5b5061055860048036038101906105539190613094565b610f90565b6040516105659190612d16565b60405180910390f35b348015610579575f5ffd5b50610594600480360381019061058f9190612bcc565b610fbd565b6040516105a2929190612fbd565b60405180910390f35b3480156105b6575f5ffd5b506105d160048036038101906105cc9190613105565b6110a1565b005b3480156105de575f5ffd5b506105f960048036038101906105f491906131e1565b6110b7565b005b348015610606575f5ffd5b5061060f6110dc565b60405161061c9190612d16565b60405180910390f35b348015610630575f5ffd5b5061064b60048036038101906106469190612bcc565b6110ea565b6040516106589190612b79565b60405180910390f35b34801561066c575f5ffd5b5061068760048036038101906106829190613261565b611227565b6040516106949190612af0565b60405180910390f35b3480156106a8575f5ffd5b506106c360048036038101906106be9190612eed565b6112b5565b005b5f6106cf82611339565b9050919050565b6060600280546106e5906132cc565b80601f0160208091040260200160405190810160405280929190818152602001828054610711906132cc565b801561075c5780601f106107335761010080835404028352916020019161075c565b820191905f5260205f20905b81548152906001019060200180831161073f57829003601f168201915b5050505050905090565b5f6107708261134a565b5061077a826113d0565b9050919050565b610793828261078e611409565b611410565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610807575f6040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016107fe9190612c36565b60405180910390fd5b5f61081a8383610815611409565b611422565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610890578382826040517f64283d7b000000000000000000000000000000000000000000000000000000008152600401610887939291906132fc565b60405180910390fd5b50505050565b600c5481565b5f5f5f60015f8681526020019081526020015f2090505f815f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505f825f0160149054906101000a90046bffffffffffffffffffffffff1690505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361096e575f5f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691505f5f0160149054906101000a90046bffffffffffffffffffffffff1690505b5f610977611437565b6bffffffffffffffffffffffff16826bffffffffffffffffffffffff168861099f919061335e565b6109a991906133cc565b9050828195509550505050509250929050565b6109c4611440565b6109cc6114c7565b565b6109e883838360405180602001604052805f8152506110b7565b505050565b5f600860149054906101000a900460ff16905090565b5f5f610a0e83611529565b9050600d81604051610a209190613436565b908152602001604051809103902054915050919050565b5f610a418261134a565b9050919050565b610a506115f5565b610a58611644565b600c5481600560068110610a6f57610a6e61344c565b5b602002015114610ab4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aab906134e9565b60405180910390fd5b5f600190505b60016006610ac89190613507565b811015610bd85781600182610add9190613507565b60068110610aee57610aed61344c565b5b6020020151828260068110610b0657610b0561344c565b5b602002015111610b4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b42906135aa565b60405180910390fd5b6001828260068110610b6057610b5f61344c565b5b602002015110158015610b8c5750600b54828260068110610b8457610b8361344c565b5b602002015111155b610bcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc290613612565b60405180910390fd5b8080600101915050610aba565b505f610be382611529565b90505f600d82604051610bf69190613436565b90815260200160405180910390205414610c45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3c9061367a565b60405180910390fd5b5f610c50600a61168e565b9050610c5c338261169a565b5f600e5f8381526020019081526020015f20905083815f01906006610c829291906129c8565b5042816006018190555081600d84604051610c9d9190613436565b908152602001604051809103902081905550610cb9600a6116b7565b69021e19e0c9bab24000003414610d05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cfc906136e2565b60405180910390fd5b505050610d106116cb565b50565b5f5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610d84575f6040517f89c62b64000000000000000000000000000000000000000000000000000000008152600401610d7b9190612c36565b60405180910390fd5b60055f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b600b5481565b610dd7611440565b610de05f6116d5565b565b610dea612a08565b5f5f73ffffffffffffffffffffffffffffffffffffffff16610e0b84610a37565b73ffffffffffffffffffffffffffffffffffffffff1603610e61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e589061374a565b60405180910390fd5b5f600e5f8581526020019081526020015f209050805f01816006015481600680602002604051908101604052809291908260068015610eb5576020028201915b815481526020019060010190808311610ea1575b505050505091509250925050915091565b610ece611440565b610ed6611798565b565b5f60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060038054610f0f906132cc565b80601f0160208091040260200160405190810160405280929190818152602001828054610f3b906132cc565b8015610f865780601f10610f5d57610100808354040283529160200191610f86565b820191905f5260205f20905b815481529060010190602001808311610f6957829003601f168201915b5050505050905090565b600d818051602081018201805184825260208301602085012081835280955050505050505f915090505481565b610fc5612a08565b5f5f73ffffffffffffffffffffffffffffffffffffffff16610fe684610a37565b73ffffffffffffffffffffffffffffffffffffffff160361103c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110339061374a565b60405180910390fd5b5f600e5f8581526020019081526020015f209050805f01816006015481600680602002604051908101604052809291908260068015611090576020028201915b81548152602001906001019080831161107c575b505050505091509250925050915091565b6110b36110ac611409565b83836117fb565b5050565b6110c2848484610797565b6110d66110cd611409565b85858585611964565b50505050565b69021e19e0c9bab240000081565b60605f73ffffffffffffffffffffffffffffffffffffffff1661110c83610a37565b73ffffffffffffffffffffffffffffffffffffffff1603611162576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611159906137b2565b60405180910390fd5b5f600e5f8481526020019081526020015f2090505f61118082611b10565b90505f6111fb6111cd845f016006806020026040519081016040528092919082600680156111c3576020028201915b8154815260200190600101908083116111af575b5050505050611c1a565b6111d684611cf6565b6040516020016111e792919061398e565b604051602081830303815290604052611cf6565b90508060405160200161120e9190613a32565b6040516020818303038152906040529350505050919050565b5f60075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b6112bd611440565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361132d575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016113249190612c36565b60405180910390fd5b611336816116d5565b50565b5f61134382611d23565b9050919050565b5f5f61135583611e04565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036113c757826040517f7e2732890000000000000000000000000000000000000000000000000000000081526004016113be9190612d16565b60405180910390fd5b80915050919050565b5f60065f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b5f33905090565b61141d8383836001611e3d565b505050565b5f61142e848484611ffc565b90509392505050565b5f612710905090565b611448611409565b73ffffffffffffffffffffffffffffffffffffffff16611466610ed8565b73ffffffffffffffffffffffffffffffffffffffff16146114c557611489611409565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016114bc9190612c36565b60405180910390fd5b565b6114cf612207565b5f600860146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa611512611409565b60405161151f9190612c36565b60405180910390a1565b60605f60405180602001604052805f81525090505f5f90505b600160066115509190613507565b8110156115a7578161157885836006811061156e5761156d61344c565b5b6020020151612250565b604051602001611589929190613a9d565b60405160208183030381529060405291508080600101915050611542565b50806115ca846005600681106115c0576115bf61344c565b5b6020020151612250565b6040516020016115db929190613acb565b604051602081830303815290604052905080915050919050565b60026009540361163a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163190613b38565b60405180910390fd5b6002600981905550565b61164c6109ed565b1561168c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168390613ba0565b60405180910390fd5b565b5f815f01549050919050565b6116b3828260405180602001604052805f81525061231a565b5050565b6001815f015f828254019250508190555050565b6001600981905550565b5f60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6117a0611644565b6001600860146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586117e4611409565b6040516117f19190612c36565b60405180910390a1565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361186b57816040517f5b08ba180000000000000000000000000000000000000000000000000000000081526004016118629190612c36565b60405180910390fd5b8060075f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516119579190612af0565b60405180910390a3505050565b5f8373ffffffffffffffffffffffffffffffffffffffff163b1115611b09578273ffffffffffffffffffffffffffffffffffffffff1663150b7a02868685856040518563ffffffff1660e01b81526004016119c29493929190613c10565b6020604051808303815f875af19250505080156119fd57506040513d601f19601f820116820180604052508101906119fa9190613c6e565b60015b611a7e573d805f8114611a2b576040519150601f19603f3d011682016040523d82523d5f602084013e611a30565b606091505b505f815103611a7657836040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600401611a6d9190612c36565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611b0757836040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600401611afe9190612c36565b60405180910390fd5b505b5050505050565b60605f611b32835f015f60068110611b2b57611b2a61344c565b5b015461233d565b90505f611b55845f01600160068110611b4e57611b4d61344c565b5b015461233d565b90505f611b78855f01600260068110611b7157611b7061344c565b5b015461233d565b90505f611b9b865f01600360068110611b9457611b9361344c565b5b015461233d565b90505f611bbe875f01600460068110611bb757611bb661344c565b5b015461233d565b90505f611be1885f01600560068110611bda57611bd961344c565b5b015461233d565b9050858585858585604051602001611bfe96959493929190614881565b6040516020818303038152906040529650505050505050919050565b60605f60405180602001604052805f81525090505f5f90505b6006811015611cec5781611c5d858360068110611c5357611c5261344c565b5b602002015161233d565b60016006611c6b9190613507565b8310611c855760405180602001604052805f815250611cbc565b6040518060400160405280600181526020017f2d000000000000000000000000000000000000000000000000000000000000008152505b604051602001611cce9392919061497d565b60405160208183030381529060405291508080600101915050611c33565b5080915050919050565b6060611d1c82604051806060016040528060408152602001614a94604091396001612390565b9050919050565b5f7f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611ded57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611dfd5750611dfc8261251f565b5b9050919050565b5f60045f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b8080611e7557505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15611fa7575f611e848461134a565b90505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611eee57508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b8015611f015750611eff8184611227565b155b15611f4357826040517fa9fbf51f000000000000000000000000000000000000000000000000000000008152600401611f3a9190612c36565b60405180910390fd5b8115611fa557838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b8360065f8581526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b5f5f61200784611e04565b90505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461204857612047818486612598565b5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146120d3576120875f855f5f611e3d565b600160055f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825403925050819055505b5f73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161461215257600160055f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8460045f8681526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4809150509392505050565b61220f6109ed565b61224e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612245906149f7565b60405180910390fd5b565b60605f600161225e8461265b565b0190505f8167ffffffffffffffff81111561227c5761227b612d98565b5b6040519080825280601f01601f1916602001820160405280156122ae5781602001600182028036833780820191505090505b5090505f82602001820190505b60011561230f578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85816123045761230361339f565b5b0494505f85036122bb575b819350505050919050565b61232483836127ac565b61233861232f611409565b5f858585611964565b505050565b6060600a8210801561234e57505f82115b6123605761235b82612250565b612389565b61236982612250565b6040516020016123799190614a3b565b6040516020818303038152906040525b9050919050565b60605f8451036123b05760405180602001604052805f8152509050612518565b5f826123e15760036002865160046123c8919061335e565b6123d29190614a60565b6123dc91906133cc565b612408565b6003600286516123f19190614a60565b6123fb91906133cc565b6004612407919061335e565b5b90505f8167ffffffffffffffff81111561242557612424612d98565b5b6040519080825280601f01601f1916602001820160405280156124575781602001600182028036833780820191505090505b509050600185016020820187885189016020810180515f82525b828410156124cc576003840193508351603f8160121c168701518653600186019550603f81600c1c168701518653600186019550603f8160061c168701518653600186019550603f8116870151865360018601955050612471565b808252891561250c5760038c5106600181146124ef57600281146125025761250a565b603d6001870353603d600287035361250a565b603d60018703535b505b50505050505080925050505b9392505050565b5f7f2a55205a000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061259157506125908261289f565b5b9050919050565b6125a3838383612908565b612656575f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361261757806040517f7e27328900000000000000000000000000000000000000000000000000000000815260040161260e9190612d16565b60405180910390fd5b81816040517f177e802f00000000000000000000000000000000000000000000000000000000815260040161264d929190612d6d565b60405180910390fd5b505050565b5f5f5f90507a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106126b7577a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083816126ad576126ac61339f565b5b0492506040810190505b6d04ee2d6d415b85acef810000000083106126f4576d04ee2d6d415b85acef810000000083816126ea576126e961339f565b5b0492506020810190505b662386f26fc10000831061272357662386f26fc1000083816127195761271861339f565b5b0492506010810190505b6305f5e100831061274c576305f5e10083816127425761274161339f565b5b0492506008810190505b61271083106127715761271083816127675761276661339f565b5b0492506004810190505b60648310612794576064838161278a5761278961339f565b5b0492506002810190505b600a83106127a3576001810190505b80915050919050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361281c575f6040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016128139190612c36565b60405180910390fd5b5f61282883835f611422565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461289a575f6040517f73c6ac6e0000000000000000000000000000000000000000000000000000000081526004016128919190612c36565b60405180910390fd5b505050565b5f7f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b5f5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156129bf57508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612980575061297f8484611227565b5b806129be57508273ffffffffffffffffffffffffffffffffffffffff166129a6836113d0565b73ffffffffffffffffffffffffffffffffffffffff16145b5b90509392505050565b82600681019282156129f7579160200282015b828111156129f65782518255916020019190600101906129db565b5b509050612a049190612a2a565b5090565b6040518060c00160405280600690602082028036833780820191505090505090565b5b80821115612a41575f815f905550600101612a2b565b5090565b5f604051905090565b5f5ffd5b5f5ffd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612a8a81612a56565b8114612a94575f5ffd5b50565b5f81359050612aa581612a81565b92915050565b5f60208284031215612ac057612abf612a4e565b5b5f612acd84828501612a97565b91505092915050565b5f8115159050919050565b612aea81612ad6565b82525050565b5f602082019050612b035f830184612ae1565b92915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f612b4b82612b09565b612b558185612b13565b9350612b65818560208601612b23565b612b6e81612b31565b840191505092915050565b5f6020820190508181035f830152612b918184612b41565b905092915050565b5f819050919050565b612bab81612b99565b8114612bb5575f5ffd5b50565b5f81359050612bc681612ba2565b92915050565b5f60208284031215612be157612be0612a4e565b5b5f612bee84828501612bb8565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612c2082612bf7565b9050919050565b612c3081612c16565b82525050565b5f602082019050612c495f830184612c27565b92915050565b612c5881612c16565b8114612c62575f5ffd5b50565b5f81359050612c7381612c4f565b92915050565b5f5f60408385031215612c8f57612c8e612a4e565b5b5f612c9c85828601612c65565b9250506020612cad85828601612bb8565b9150509250929050565b5f5f5f60608486031215612cce57612ccd612a4e565b5b5f612cdb86828701612c65565b9350506020612cec86828701612c65565b9250506040612cfd86828701612bb8565b9150509250925092565b612d1081612b99565b82525050565b5f602082019050612d295f830184612d07565b92915050565b5f5f60408385031215612d4557612d44612a4e565b5b5f612d5285828601612bb8565b9250506020612d6385828601612bb8565b9150509250929050565b5f604082019050612d805f830185612c27565b612d8d6020830184612d07565b9392505050565b5f5ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b612dce82612b31565b810181811067ffffffffffffffff82111715612ded57612dec612d98565b5b80604052505050565b5f612dff612a45565b9050612e0b8282612dc5565b919050565b5f67ffffffffffffffff821115612e2a57612e29612d98565b5b602082029050919050565b5f5ffd5b5f612e4b612e4684612e10565b612df6565b90508060208402830185811115612e6557612e64612e35565b5b835b81811015612e8e5780612e7a8882612bb8565b845260208401935050602081019050612e67565b5050509392505050565b5f82601f830112612eac57612eab612d94565b5b6006612eb9848285612e39565b91505092915050565b5f60c08284031215612ed757612ed6612a4e565b5b5f612ee484828501612e98565b91505092915050565b5f60208284031215612f0257612f01612a4e565b5b5f612f0f84828501612c65565b91505092915050565b5f60069050919050565b5f81905092915050565b5f819050919050565b612f3e81612b99565b82525050565b5f612f4f8383612f35565b60208301905092915050565b5f602082019050919050565b612f7081612f18565b612f7a8184612f22565b9250612f8582612f2c565b805f5b83811015612fb5578151612f9c8782612f44565b9650612fa783612f5b565b925050600181019050612f88565b505050505050565b5f60e082019050612fd05f830185612f67565b612fdd60c0830184612d07565b9392505050565b5f5ffd5b5f67ffffffffffffffff82111561300257613001612d98565b5b61300b82612b31565b9050602081019050919050565b828183375f83830152505050565b5f61303861303384612fe8565b612df6565b90508281526020810184848401111561305457613053612fe4565b5b61305f848285613018565b509392505050565b5f82601f83011261307b5761307a612d94565b5b813561308b848260208601613026565b91505092915050565b5f602082840312156130a9576130a8612a4e565b5b5f82013567ffffffffffffffff8111156130c6576130c5612a52565b5b6130d284828501613067565b91505092915050565b6130e481612ad6565b81146130ee575f5ffd5b50565b5f813590506130ff816130db565b92915050565b5f5f6040838503121561311b5761311a612a4e565b5b5f61312885828601612c65565b9250506020613139858286016130f1565b9150509250929050565b5f67ffffffffffffffff82111561315d5761315c612d98565b5b61316682612b31565b9050602081019050919050565b5f61318561318084613143565b612df6565b9050828152602081018484840111156131a1576131a0612fe4565b5b6131ac848285613018565b509392505050565b5f82601f8301126131c8576131c7612d94565b5b81356131d8848260208601613173565b91505092915050565b5f5f5f5f608085870312156131f9576131f8612a4e565b5b5f61320687828801612c65565b945050602061321787828801612c65565b935050604061322887828801612bb8565b925050606085013567ffffffffffffffff81111561324957613248612a52565b5b613255878288016131b4565b91505092959194509250565b5f5f6040838503121561327757613276612a4e565b5b5f61328485828601612c65565b925050602061329585828601612c65565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806132e357607f821691505b6020821081036132f6576132f561329f565b5b50919050565b5f60608201905061330f5f830186612c27565b61331c6020830185612d07565b6133296040830184612c27565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61336882612b99565b915061337383612b99565b925082820261338181612b99565b9150828204841483151761339857613397613331565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6133d682612b99565b91506133e183612b99565b9250826133f1576133f061339f565b5b828204905092915050565b5f81905092915050565b5f61341082612b09565b61341a81856133fc565b935061342a818560208601612b23565b80840191505092915050565b5f6134418284613406565b915081905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f526564204e756d626572206d757374206d617463682074686520436861696e205f8201527f436f646500000000000000000000000000000000000000000000000000000000602082015250565b5f6134d3602483612b13565b91506134de82613479565b604082019050919050565b5f6020820190508181035f830152613500816134c7565b9050919050565b5f61351182612b99565b915061351c83612b99565b925082820390508181111561353457613533613331565b5b92915050565b7f5768697465204e756d62657273206d75737420626520736f7274656420696e205f8201527f617363656e64696e67206f726465722e00000000000000000000000000000000602082015250565b5f613594603083612b13565b915061359f8261353a565b604082019050919050565b5f6020820190508181035f8301526135c181613588565b9050919050565b7f5768697465204e756d62657273206f7574206f662072616e67652e00000000005f82015250565b5f6135fc601b83612b13565b9150613607826135c8565b602082019050919050565b5f6020820190508181035f830152613629816135f0565b9050919050565b7f4e756d6265727320657869737465642e000000000000000000000000000000005f82015250565b5f613664601083612b13565b915061366f82613630565b602082019050919050565b5f6020820190508181035f83015261369181613658565b9050919050565b7f496e636f7272656374207061796d656e7420616d6f756e7400000000000000005f82015250565b5f6136cc601883612b13565b91506136d782613698565b602082019050919050565b5f6020820190508181035f8301526136f9816136c0565b9050919050565b7f5469636b657420646f6573206e6f742065786973742e000000000000000000005f82015250565b5f613734601683612b13565b915061373f82613700565b602082019050919050565b5f6020820190508181035f83015261376181613728565b9050919050565b7f55524920717565727920666f72206e6f6e6578697374656e7420746f6b656e005f82015250565b5f61379c601f83612b13565b91506137a782613768565b602082019050919050565b5f6020820190508181035f8301526137c981613790565b9050919050565b7f7b226e616d65223a2200000000000000000000000000000000000000000000005f82015250565b5f6138046009836133fc565b915061380f826137d0565b600982019050919050565b7f506f776572636f696e205469636b65743a2000000000000000000000000000005f82015250565b5f61384e6012836133fc565b91506138598261381a565b601282019050919050565b7f222c20226465736372697074696f6e223a2022506f776572636f696e205469635f8201527f6b6574204e46542e222c2022696d616765223a2022646174613a696d6167652f60208201527f7376672b786d6c3b6261736536342c0000000000000000000000000000000000604082015250565b5f6138e4604f836133fc565b91506138ef82613864565b604f82019050919050565b7f222c202261747472696275746573223a205b00000000000000000000000000005f82015250565b5f61392e6012836133fc565b9150613939826138fa565b601282019050919050565b7f5d7d0000000000000000000000000000000000000000000000000000000000005f82015250565b5f6139786002836133fc565b915061398382613944565b600282019050919050565b5f613998826137f8565b91506139a382613842565b91506139af8285613406565b91506139ba826138d8565b91506139c68284613406565b91506139d182613922565b91506139dc8261396c565b91508190509392505050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c0000005f82015250565b5f613a1c601d836133fc565b9150613a27826139e8565b601d82019050919050565b5f613a3c82613a10565b9150613a488284613406565b915081905092915050565b7f2d000000000000000000000000000000000000000000000000000000000000005f82015250565b5f613a876001836133fc565b9150613a9282613a53565b600182019050919050565b5f613aa88285613406565b9150613ab48284613406565b9150613abf82613a7b565b91508190509392505050565b5f613ad68285613406565b9150613ae28284613406565b91508190509392505050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c005f82015250565b5f613b22601f83612b13565b9150613b2d82613aee565b602082019050919050565b5f6020820190508181035f830152613b4f81613b16565b9050919050565b7f5061757361626c653a20706175736564000000000000000000000000000000005f82015250565b5f613b8a601083612b13565b9150613b9582613b56565b602082019050919050565b5f6020820190508181035f830152613bb781613b7e565b9050919050565b5f81519050919050565b5f82825260208201905092915050565b5f613be282613bbe565b613bec8185613bc8565b9350613bfc818560208601612b23565b613c0581612b31565b840191505092915050565b5f608082019050613c235f830187612c27565b613c306020830186612c27565b613c3d6040830185612d07565b8181036060830152613c4f8184613bd8565b905095945050505050565b5f81519050613c6881612a81565b92915050565b5f60208284031215613c8357613c82612a4e565b5b5f613c9084828501613c5a565b91505092915050565b7f3c7376672077696474683d2236303022206865696768743d22363030222076695f8201527f6577426f783d22302030203130303020313030302220786d6c6e733d2268747460208201527f703a2f2f7777772e77332e6f72672f323030302f737667223e3c72656374207760408201527f696474683d223130302522206865696768743d2231303025222066696c6c3d2260608201527f2330303362373922202f3e000000000000000000000000000000000000000000608082015250565b5f613d65608b836133fc565b9150613d7082613c99565b608b82019050919050565b7f3c706f6c79676f6e207472616e73666f726d3d227472616e736c6174652831335f8201527f302c2032303029207363616c6528302e3238292220706f696e74733d2231303060208201527f2c3230203133302c3735203230302c3735203134352c313230203136302c313860408201527f30203130302c3135302034302c3138302035352c31323020302c37352037302c60608201527f3735222066696c6c3d222366666622202f3e0000000000000000000000000000608082015250565b5f613e476092836133fc565b9150613e5282613d7b565b609282019050919050565b7f3c706f6c79676f6e207472616e73666f726d3d227472616e736c6174652837395f8201527f302c2032303029207363616c6528302e3238292220706f696e74733d2231303060208201527f2c3230203133302c3735203230302c3735203134352c313230203136302c313860408201527f30203130302c3135302034302c3138302035352c31323020302c37352037302c60608201527f3735222066696c6c3d222366666622202f3e0000000000000000000000000000608082015250565b5f613f296092836133fc565b9150613f3482613e5d565b609282019050919050565b7f3c706f6c79676f6e20706f696e74733d2235302c313030203130302c353020395f8201527f30302c3530203935302c313030203935302c393030203930302c39353020313060208201527f302c3935302035302c393030222066696c6c3d226e6f6e6522207374726f6b6560408201527f3d22776869746522207374726f6b652d77696474683d223130222f3e00000000606082015250565b5f613fe5607c836133fc565b9150613ff082613f3f565b607c82019050919050565b7f3c7465787420783d223530302220793d223235302220666f6e742d73697a653d5f8201527f2236302220666f6e742d7765696768743d22626f6c642220746578742d616e6360208201527f686f723d226d6964646c65222066696c6c3d2223464646223e504f574552434f60408201527f494e3c2f746578743e0000000000000000000000000000000000000000000000606082015250565b5f6140a16069836133fc565b91506140ac82613ffb565b606982019050919050565b7f3c6c696e652078313d223930222079313d22343030222078323d2239313022205f8201527f79323d2234303022207374726f6b653d222346464622207374726f6b652d776960208201527f6474683d2237222f3e3c6c696e652078313d223930222079313d22363030222060408201527f78323d22393130222079323d2236303022207374726f6b653d2223464646222060608201527f207374726f6b652d77696474683d2237222f3e00000000000000000000000000608082015250565b5f6141836093836133fc565b915061418e826140b7565b609382019050919050565b7f3c636972636c652063783d22313530222063793d223530302220723d223630225f8201527f2066696c6c3d2223666666222f3e3c7465787420783d223135302220793d223560208201527f30302220666f6e742d73697a653d2236302220666f6e742d7765696768743d2260408201527f626f6c642220746578742d616e63686f723d226d6964646c65222064793d222e60608201527f3335656d222066696c6c3d2223303033623739223e0000000000000000000000608082015250565b5f6142656095836133fc565b915061427082614199565b609582019050919050565b7f3c2f746578743e3c636972636c652063783d22323930222063793d22353030225f8201527f20723d223630222066696c6c3d2223666666222f3e3c7465787420783d22323960208201527f302220793d223530302220666f6e742d73697a653d2236302220666f6e742d7760408201527f65696768743d22626f6c642220746578742d616e63686f723d226d6964646c6560608201527f222064793d222e3335656d222066696c6c3d2223303033623739223e00000000608082015250565b5f614347609c836133fc565b91506143528261427b565b609c82019050919050565b7f3c2f746578743e3c636972636c652063783d22343330222063793d22353030225f8201527f20723d223630222066696c6c3d2223666666222f3e3c7465787420783d22343360208201527f302220793d223530302220666f6e742d73697a653d2236302220666f6e742d7760408201527f65696768743d22626f6c642220746578742d616e63686f723d226d6964646c6560608201527f222064793d222e3335656d222066696c6c3d2223303033623739223e00000000608082015250565b5f614429609c836133fc565b91506144348261435d565b609c82019050919050565b7f3c2f746578743e3c636972636c652063783d22353730222063793d22353030225f8201527f20723d223630222066696c6c3d2223666666222f3e3c7465787420783d22353760208201527f302220793d223530302220666f6e742d73697a653d2236302220666f6e742d7760408201527f65696768743d22626f6c642220746578742d616e63686f723d226d6964646c6560608201527f222064793d222e3335656d222066696c6c3d2223303033623739223e00000000608082015250565b5f61450b609c836133fc565b91506145168261443f565b609c82019050919050565b7f3c2f746578743e3c636972636c652063783d22373130222063793d22353030225f8201527f20723d223630222066696c6c3d2223666666222f3e3c7465787420783d22373160208201527f302220793d223530302220666f6e742d73697a653d2236302220666f6e742d7760408201527f65696768743d22626f6c642220746578742d616e63686f723d226d6964646c6560608201527f222064793d222e3335656d222066696c6c3d2223303033623739223e00000000608082015250565b5f6145ed609c836133fc565b91506145f882614521565b609c82019050919050565b7f3c2f746578743e3c636972636c652063783d22383530222063793d22353030225f8201527f20723d223630222066696c6c3d2223636430303339222f3e3c7465787420783d60208201527f223835302220793d223530302220666f6e742d73697a653d2236302220666f6e60408201527f742d7765696768743d22626f6c642220746578742d616e63686f723d226d696460608201527f646c65222064793d222e3335656d222066696c6c3d2223666666223e00000000608082015250565b5f6146cf609c836133fc565b91506146da82614603565b609c82019050919050565b7f3c2f746578743e000000000000000000000000000000000000000000000000005f82015250565b5f6147196007836133fc565b9150614724826146e5565b600782019050919050565b7f3c7465787420783d223530302220793d223735302220666f6e742d73697a653d5f8201527f2235302220746578742d616e63686f723d226d6964646c65222066696c6c3d2260208201527f7768697465223e54686520676966742074686174206b65657073206f6e20676960408201527f76696e67213c2f746578743e0000000000000000000000000000000000000000606082015250565b5f6147d5606c836133fc565b91506147e08261472f565b606c82019050919050565b7f3c7465787420783d223530302220793d223930302220666f6e742d73697a653d5f8201527f2233352220746578742d616e63686f723d226d6964646c65222066696c6c3d2260208201527f7768697465223e506f776572636f696e2e636173683c2f746578743e00000000604082015250565b5f61486b605c836133fc565b9150614876826147eb565b605c82019050919050565b5f61488b82613d59565b915061489682613e3b565b91506148a182613f1d565b91506148ac82613fd9565b91506148b782614095565b91506148c282614177565b91506148cd82614259565b91506148d98289613406565b91506148e48261433b565b91506148f08288613406565b91506148fb8261441d565b91506149078287613406565b9150614912826144ff565b915061491e8286613406565b9150614929826145e1565b91506149358285613406565b9150614940826146c3565b915061494c8284613406565b91506149578261470d565b9150614962826147c9565b915061496d8261485f565b9150819050979650505050505050565b5f6149888286613406565b91506149948285613406565b91506149a08284613406565b9150819050949350505050565b7f5061757361626c653a206e6f74207061757365640000000000000000000000005f82015250565b5f6149e1601483612b13565b91506149ec826149ad565b602082019050919050565b5f6020820190508181035f830152614a0e816149d5565b9050919050565b7f3000000000000000000000000000000000000000000000000000000000000000815250565b5f614a4582614a15565b600182019150614a558284613406565b915081905092915050565b5f614a6a82612b99565b9150614a7583612b99565b9250828201905080821115614a8d57614a8c613331565b5b9291505056fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa26469706673582212202338d2979644d5cd8aa6b113c07080814b90c91377c0c3cc0c6ff7453886591664736f6c634300081c0033