60806040523480156200001157600080fd5b506040518060400160405280600581526020017f446f6769650000000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f444f47000000000000000000000000000000000000000000000000000000000081525081600090816200008f91906200032c565b508060019081620000a191906200032c565b505050600060068190555062000413565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200013457607f821691505b6020821081036200014a5762000149620000ec565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620001b47fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000175565b620001c0868362000175565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b60006200020d620002076200020184620001d8565b620001e2565b620001d8565b9050919050565b6000819050919050565b6200022983620001ec565b62000241620002388262000214565b84845462000182565b825550505050565b600090565b6200025862000249565b620002658184846200021e565b505050565b5b818110156200028d57620002816000826200024e565b6001810190506200026b565b5050565b601f821115620002dc57620002a68162000150565b620002b18462000165565b81016020851015620002c1578190505b620002d9620002d08562000165565b8301826200026a565b50505b505050565b600082821c905092915050565b60006200030160001984600802620002e1565b1980831691505092915050565b60006200031c8383620002ee565b9150826002028217905092915050565b6200033782620000b2565b67ffffffffffffffff811115620003535762000352620000bd565b5b6200035f82546200011b565b6200036c82828562000291565b600060209050601f831160018114620003a457600084156200038f578287015190505b6200039b85826200030e565b8655506200040b565b601f198416620003b48662000150565b60005b82811015620003de57848901518255600182019150602085019450602081019050620003b7565b86831015620003fe5784890151620003fa601f891682620002ee565b8355505b6001600288020188555050505b505050505050565b611c6680620004236000396000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c806370a0823111610097578063b88d4fde11610066578063b88d4fde146102ad578063c2229fea146102c9578063c87b56dd146102e7578063e985e9c51461031757610100565b806370a082311461022557806378ce90351461025557806395d89b4114610273578063a22cb4651461029157610100565b806323b872dd116100d357806323b872dd1461019f57806342842e0e146101bb5780636352211e146101d75780636e02007d1461020757610100565b806301ffc9a71461010557806306fdde0314610135578063081812fc14610153578063095ea7b314610183575b600080fd5b61011f600480360381019061011a9190611485565b610347565b60405161012c91906114cd565b60405180910390f35b61013d610429565b60405161014a9190611578565b60405180910390f35b61016d600480360381019061016891906115d0565b6104bb565b60405161017a919061163e565b60405180910390f35b61019d60048036038101906101989190611685565b6104d7565b005b6101b960048036038101906101b491906116c5565b6104ed565b005b6101d560048036038101906101d091906116c5565b6105ef565b005b6101f160048036038101906101ec91906115d0565b61060f565b6040516101fe919061163e565b60405180910390f35b61020f610621565b60405161021c9190611727565b60405180910390f35b61023f600480360381019061023a9190611742565b61062b565b60405161024c9190611727565b60405180910390f35b61025d6106e5565b60405161026a9190611578565b60405180910390f35b61027b610701565b6040516102889190611578565b60405180910390f35b6102ab60048036038101906102a6919061179b565b610793565b005b6102c760048036038101906102c29190611910565b6107a9565b005b6102d16107c6565b6040516102de9190611727565b60405180910390f35b61030160048036038101906102fc91906115d0565b610820565b60405161030e9190611578565b60405180910390f35b610331600480360381019061032c9190611993565b610842565b60405161033e91906114cd565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061041257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806104225750610421826108d6565b5b9050919050565b60606000805461043890611a02565b80601f016020809104026020016040519081016040528092919081815260200182805461046490611a02565b80156104b15780601f10610486576101008083540402835291602001916104b1565b820191906000526020600020905b81548152906001019060200180831161049457829003601f168201915b5050505050905090565b60006104c682610940565b506104d0826109c8565b9050919050565b6104e982826104e4610a05565b610a0d565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361055f5760006040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600401610556919061163e565b60405180910390fd5b6000610573838361056e610a05565b610a1f565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146105e9578382826040517f64283d7b0000000000000000000000000000000000000000000000000000000081526004016105e093929190611a33565b60405180910390fd5b50505050565b61060a838383604051806020016040528060008152506107a9565b505050565b600061061a82610940565b9050919050565b6000600654905090565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361069e5760006040517f89c62b64000000000000000000000000000000000000000000000000000000008152600401610695919061163e565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b604051806080016040528060578152602001611bda6057913981565b60606001805461071090611a02565b80601f016020809104026020016040519081016040528092919081815260200182805461073c90611a02565b80156107895780601f1061075e57610100808354040283529160200191610789565b820191906000526020600020905b81548152906001019060200180831161076c57829003601f168201915b5050505050905090565b6107a561079e610a05565b8383610c39565b5050565b6107b48484846104ed565b6107c084848484610da8565b50505050565b60006107d433600654610f5f565b6006547fef1da42f89c42f48befa143007e6f5efd84a2d1cc3dc97c5edd2d3373220f66d60405160405180910390a26001600660008282546108169190611a99565b9250508190555090565b6060604051806080016040528060578152602001611bda605791399050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008061094c83610f7d565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036109bf57826040517f7e2732890000000000000000000000000000000000000000000000000000000081526004016109b69190611727565b60405180910390fd5b80915050919050565b60006004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600033905090565b610a1a8383836001610fba565b505050565b600080610a2b84610f7d565b9050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614610a6d57610a6c81848661117f565b5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610afe57610aaf600085600080610fba565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614610b81576001600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b846002600086815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4809150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610caa57816040517f5b08ba18000000000000000000000000000000000000000000000000000000008152600401610ca1919061163e565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610d9b91906114cd565b60405180910390a3505050565b60008373ffffffffffffffffffffffffffffffffffffffff163b1115610f59578273ffffffffffffffffffffffffffffffffffffffff1663150b7a02610dec610a05565b8685856040518563ffffffff1660e01b8152600401610e0e9493929190611b22565b6020604051808303816000875af1925050508015610e4a57506040513d601f19601f82011682018060405250810190610e479190611b83565b60015b610ece573d8060008114610e7a576040519150601f19603f3d011682016040523d82523d6000602084013e610e7f565b606091505b506000815103610ec657836040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600401610ebd919061163e565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614610f5757836040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600401610f4e919061163e565b60405180910390fd5b505b50505050565b610f79828260405180602001604052806000815250611243565b5050565b60006002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b8080610ff35750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561112757600061100384610940565b9050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561106e57508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b8015611081575061107f8184610842565b155b156110c357826040517fa9fbf51f0000000000000000000000000000000000000000000000000000000081526004016110ba919061163e565b60405180910390fd5b811561112557838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b836004600085815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b61118a83838361125f565b61123e57600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036111ff57806040517f7e2732890000000000000000000000000000000000000000000000000000000081526004016111f69190611727565b60405180910390fd5b81816040517f177e802f000000000000000000000000000000000000000000000000000000008152600401611235929190611bb0565b60405180910390fd5b505050565b61124d8383611320565b61125a6000848484610da8565b505050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561131757508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806112d857506112d78484610842565b5b8061131657508273ffffffffffffffffffffffffffffffffffffffff166112fe836109c8565b73ffffffffffffffffffffffffffffffffffffffff16145b5b90509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036113925760006040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600401611389919061163e565b60405180910390fd5b60006113a083836000610a1f565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146114145760006040517f73c6ac6e00000000000000000000000000000000000000000000000000000000815260040161140b919061163e565b60405180910390fd5b505050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6114628161142d565b811461146d57600080fd5b50565b60008135905061147f81611459565b92915050565b60006020828403121561149b5761149a611423565b5b60006114a984828501611470565b91505092915050565b60008115159050919050565b6114c7816114b2565b82525050565b60006020820190506114e260008301846114be565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611522578082015181840152602081019050611507565b60008484015250505050565b6000601f19601f8301169050919050565b600061154a826114e8565b61155481856114f3565b9350611564818560208601611504565b61156d8161152e565b840191505092915050565b60006020820190508181036000830152611592818461153f565b905092915050565b6000819050919050565b6115ad8161159a565b81146115b857600080fd5b50565b6000813590506115ca816115a4565b92915050565b6000602082840312156115e6576115e5611423565b5b60006115f4848285016115bb565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611628826115fd565b9050919050565b6116388161161d565b82525050565b6000602082019050611653600083018461162f565b92915050565b6116628161161d565b811461166d57600080fd5b50565b60008135905061167f81611659565b92915050565b6000806040838503121561169c5761169b611423565b5b60006116aa85828601611670565b92505060206116bb858286016115bb565b9150509250929050565b6000806000606084860312156116de576116dd611423565b5b60006116ec86828701611670565b93505060206116fd86828701611670565b925050604061170e868287016115bb565b9150509250925092565b6117218161159a565b82525050565b600060208201905061173c6000830184611718565b92915050565b60006020828403121561175857611757611423565b5b600061176684828501611670565b91505092915050565b611778816114b2565b811461178357600080fd5b50565b6000813590506117958161176f565b92915050565b600080604083850312156117b2576117b1611423565b5b60006117c085828601611670565b92505060206117d185828601611786565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61181d8261152e565b810181811067ffffffffffffffff8211171561183c5761183b6117e5565b5b80604052505050565b600061184f611419565b905061185b8282611814565b919050565b600067ffffffffffffffff82111561187b5761187a6117e5565b5b6118848261152e565b9050602081019050919050565b82818337600083830152505050565b60006118b36118ae84611860565b611845565b9050828152602081018484840111156118cf576118ce6117e0565b5b6118da848285611891565b509392505050565b600082601f8301126118f7576118f66117db565b5b81356119078482602086016118a0565b91505092915050565b6000806000806080858703121561192a57611929611423565b5b600061193887828801611670565b945050602061194987828801611670565b935050604061195a878288016115bb565b925050606085013567ffffffffffffffff81111561197b5761197a611428565b5b611987878288016118e2565b91505092959194509250565b600080604083850312156119aa576119a9611423565b5b60006119b885828601611670565b92505060206119c985828601611670565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611a1a57607f821691505b602082108103611a2d57611a2c6119d3565b5b50919050565b6000606082019050611a48600083018661162f565b611a556020830185611718565b611a62604083018461162f565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611aa48261159a565b9150611aaf8361159a565b9250828201905080821115611ac757611ac6611a6a565b5b92915050565b600081519050919050565b600082825260208201905092915050565b6000611af482611acd565b611afe8185611ad8565b9350611b0e818560208601611504565b611b178161152e565b840191505092915050565b6000608082019050611b37600083018761162f565b611b44602083018661162f565b611b516040830185611718565b8181036060830152611b638184611ae9565b905095945050505050565b600081519050611b7d81611459565b92915050565b600060208284031215611b9957611b98611423565b5b6000611ba784828501611b6e565b91505092915050565b6000604082019050611bc5600083018561162f565b611bd26020830184611718565b939250505056fe697066733a2f2f62616679626569673337696f6972373673376d67356f6f6265746e636f6a636d3363336878617379643472766964346a71687934676b61686567342f3f66696c656e616d653d302d5055472e6a736f6ea2646970667358221220a6ba8900725588892a896495e4b787f518ac38b784e8372edd4f10b81f4419c564736f6c63430008140033