60806040523480156200001157600080fd5b506040518060400160405280600581526020017f446f6769650000000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f444f47000000000000000000000000000000000000000000000000000000000081525081600090816200008f91906200032c565b508060019081620000a191906200032c565b505050600060068190555062000413565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200013457607f821691505b6020821081036200014a5762000149620000ec565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620001b47fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000175565b620001c0868362000175565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b60006200020d620002076200020184620001d8565b620001e2565b620001d8565b9050919050565b6000819050919050565b6200022983620001ec565b62000241620002388262000214565b84845462000182565b825550505050565b600090565b6200025862000249565b620002658184846200021e565b505050565b5b818110156200028d57620002816000826200024e565b6001810190506200026b565b5050565b601f821115620002dc57620002a68162000150565b620002b18462000165565b81016020851015620002c1578190505b620002d9620002d08562000165565b8301826200026a565b50505b505050565b600082821c905092915050565b60006200030160001984600802620002e1565b1980831691505092915050565b60006200031c8383620002ee565b9150826002028217905092915050565b6200033782620000b2565b67ffffffffffffffff811115620003535762000352620000bd565b5b6200035f82546200011b565b6200036c82828562000291565b600060209050601f831160018114620003a457600084156200038f578287015190505b6200039b85826200030e565b8655506200040b565b601f198416620003b48662000150565b60005b82811015620003de57848901518255600182019150602085019450602081019050620003b7565b86831015620003fe5784890151620003fa601f891682620002ee565b8355505b6001600288020188555050505b505050505050565b611c3c80620004236000396000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c806370a0823111610097578063b88d4fde11610066578063b88d4fde146102ad578063c2229fea146102c9578063c87b56dd146102e7578063e985e9c51461031757610100565b806370a082311461022557806378ce90351461025557806395d89b4114610273578063a22cb4651461029157610100565b806323b872dd116100d357806323b872dd1461019f57806342842e0e146101bb5780636352211e146101d75780636e02007d1461020757610100565b806301ffc9a71461010557806306fdde0314610135578063081812fc14610153578063095ea7b314610183575b600080fd5b61011f600480360381019061011a919061145b565b610347565b60405161012c91906114a3565b60405180910390f35b61013d610429565b60405161014a919061154e565b60405180910390f35b61016d600480360381019061016891906115a6565b6104bb565b60405161017a9190611614565b60405180910390f35b61019d6004803603810190610198919061165b565b6104d7565b005b6101b960048036038101906101b4919061169b565b6104ed565b005b6101d560048036038101906101d0919061169b565b6105ef565b005b6101f160048036038101906101ec91906115a6565b61060f565b6040516101fe9190611614565b60405180910390f35b61020f610621565b60405161021c91906116fd565b60405180910390f35b61023f600480360381019061023a9190611718565b61062b565b60405161024c91906116fd565b60405180910390f35b61025d6106e5565b60405161026a919061154e565b60405180910390f35b61027b610701565b604051610288919061154e565b60405180910390f35b6102ab60048036038101906102a69190611771565b610793565b005b6102c760048036038101906102c291906118e6565b6107a9565b005b6102d16107c6565b6040516102de91906116fd565b60405180910390f35b61030160048036038101906102fc91906115a6565b6107f6565b60405161030e919061154e565b60405180910390f35b610331600480360381019061032c9190611969565b610818565b60405161033e91906114a3565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061041257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806104225750610421826108ac565b5b9050919050565b606060008054610438906119d8565b80601f0160208091040260200160405190810160405280929190818152602001828054610464906119d8565b80156104b15780601f10610486576101008083540402835291602001916104b1565b820191906000526020600020905b81548152906001019060200180831161049457829003601f168201915b5050505050905090565b60006104c682610916565b506104d08261099e565b9050919050565b6104e982826104e46109db565b6109e3565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361055f5760006040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016105569190611614565b60405180910390fd5b6000610573838361056e6109db565b6109f5565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146105e9578382826040517f64283d7b0000000000000000000000000000000000000000000000000000000081526004016105e093929190611a09565b60405180910390fd5b50505050565b61060a838383604051806020016040528060008152506107a9565b505050565b600061061a82610916565b9050919050565b6000600654905090565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361069e5760006040517f89c62b640000000000000000000000000000000000000000000000000000000081526004016106959190611614565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b604051806080016040528060578152602001611bb06057913981565b606060018054610710906119d8565b80601f016020809104026020016040519081016040528092919081815260200182805461073c906119d8565b80156107895780601f1061075e57610100808354040283529160200191610789565b820191906000526020600020905b81548152906001019060200180831161076c57829003601f168201915b5050505050905090565b6107a561079e6109db565b8383610c0f565b5050565b6107b48484846104ed565b6107c084848484610d7e565b50505050565b60006107d433600654610f35565b6001600660008282546107e79190611a6f565b92505081905550600654905090565b6060604051806080016040528060578152602001611bb0605791399050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008061092283610f53565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361099557826040517f7e27328900000000000000000000000000000000000000000000000000000000815260040161098c91906116fd565b60405180910390fd5b80915050919050565b60006004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600033905090565b6109f08383836001610f90565b505050565b600080610a0184610f53565b9050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614610a4357610a42818486611155565b5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610ad457610a85600085600080610f90565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614610b57576001600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b846002600086815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4809150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610c8057816040517f5b08ba18000000000000000000000000000000000000000000000000000000008152600401610c779190611614565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610d7191906114a3565b60405180910390a3505050565b60008373ffffffffffffffffffffffffffffffffffffffff163b1115610f2f578273ffffffffffffffffffffffffffffffffffffffff1663150b7a02610dc26109db565b8685856040518563ffffffff1660e01b8152600401610de49493929190611af8565b6020604051808303816000875af1925050508015610e2057506040513d601f19601f82011682018060405250810190610e1d9190611b59565b60015b610ea4573d8060008114610e50576040519150601f19603f3d011682016040523d82523d6000602084013e610e55565b606091505b506000815103610e9c57836040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600401610e939190611614565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614610f2d57836040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600401610f249190611614565b60405180910390fd5b505b50505050565b610f4f828260405180602001604052806000815250611219565b5050565b60006002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b8080610fc95750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156110fd576000610fd984610916565b9050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561104457508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b801561105757506110558184610818565b155b1561109957826040517fa9fbf51f0000000000000000000000000000000000000000000000000000000081526004016110909190611614565b60405180910390fd5b81156110fb57838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b836004600085815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b611160838383611235565b61121457600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036111d557806040517f7e2732890000000000000000000000000000000000000000000000000000000081526004016111cc91906116fd565b60405180910390fd5b81816040517f177e802f00000000000000000000000000000000000000000000000000000000815260040161120b929190611b86565b60405180910390fd5b505050565b61122383836112f6565b6112306000848484610d7e565b505050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156112ed57508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806112ae57506112ad8484610818565b5b806112ec57508273ffffffffffffffffffffffffffffffffffffffff166112d48361099e565b73ffffffffffffffffffffffffffffffffffffffff16145b5b90509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036113685760006040517f64a0ae9200000000000000000000000000000000000000000000000000000000815260040161135f9190611614565b60405180910390fd5b6000611376838360006109f5565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146113ea5760006040517f73c6ac6e0000000000000000000000000000000000000000000000000000000081526004016113e19190611614565b60405180910390fd5b505050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61143881611403565b811461144357600080fd5b50565b6000813590506114558161142f565b92915050565b600060208284031215611471576114706113f9565b5b600061147f84828501611446565b91505092915050565b60008115159050919050565b61149d81611488565b82525050565b60006020820190506114b86000830184611494565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156114f85780820151818401526020810190506114dd565b60008484015250505050565b6000601f19601f8301169050919050565b6000611520826114be565b61152a81856114c9565b935061153a8185602086016114da565b61154381611504565b840191505092915050565b600060208201905081810360008301526115688184611515565b905092915050565b6000819050919050565b61158381611570565b811461158e57600080fd5b50565b6000813590506115a08161157a565b92915050565b6000602082840312156115bc576115bb6113f9565b5b60006115ca84828501611591565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006115fe826115d3565b9050919050565b61160e816115f3565b82525050565b60006020820190506116296000830184611605565b92915050565b611638816115f3565b811461164357600080fd5b50565b6000813590506116558161162f565b92915050565b60008060408385031215611672576116716113f9565b5b600061168085828601611646565b925050602061169185828601611591565b9150509250929050565b6000806000606084860312156116b4576116b36113f9565b5b60006116c286828701611646565b93505060206116d386828701611646565b92505060406116e486828701611591565b9150509250925092565b6116f781611570565b82525050565b600060208201905061171260008301846116ee565b92915050565b60006020828403121561172e5761172d6113f9565b5b600061173c84828501611646565b91505092915050565b61174e81611488565b811461175957600080fd5b50565b60008135905061176b81611745565b92915050565b60008060408385031215611788576117876113f9565b5b600061179685828601611646565b92505060206117a78582860161175c565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6117f382611504565b810181811067ffffffffffffffff82111715611812576118116117bb565b5b80604052505050565b60006118256113ef565b905061183182826117ea565b919050565b600067ffffffffffffffff821115611851576118506117bb565b5b61185a82611504565b9050602081019050919050565b82818337600083830152505050565b600061188961188484611836565b61181b565b9050828152602081018484840111156118a5576118a46117b6565b5b6118b0848285611867565b509392505050565b600082601f8301126118cd576118cc6117b1565b5b81356118dd848260208601611876565b91505092915050565b60008060008060808587031215611900576118ff6113f9565b5b600061190e87828801611646565b945050602061191f87828801611646565b935050604061193087828801611591565b925050606085013567ffffffffffffffff811115611951576119506113fe565b5b61195d878288016118b8565b91505092959194509250565b600080604083850312156119805761197f6113f9565b5b600061198e85828601611646565b925050602061199f85828601611646565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806119f057607f821691505b602082108103611a0357611a026119a9565b5b50919050565b6000606082019050611a1e6000830186611605565b611a2b60208301856116ee565b611a386040830184611605565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611a7a82611570565b9150611a8583611570565b9250828201905080821115611a9d57611a9c611a40565b5b92915050565b600081519050919050565b600082825260208201905092915050565b6000611aca82611aa3565b611ad48185611aae565b9350611ae48185602086016114da565b611aed81611504565b840191505092915050565b6000608082019050611b0d6000830187611605565b611b1a6020830186611605565b611b2760408301856116ee565b8181036060830152611b398184611abf565b905095945050505050565b600081519050611b538161142f565b92915050565b600060208284031215611b6f57611b6e6113f9565b5b6000611b7d84828501611b44565b91505092915050565b6000604082019050611b9b6000830185611605565b611ba860208301846116ee565b939250505056fe697066733a2f2f62616679626569673337696f6972373673376d67356f6f6265746e636f6a636d3363336878617379643472766964346a71687934676b61686567342f3f66696c656e616d653d302d5055472e6a736f6ea2646970667358221220cb9be809747ef876d452c1592fef457a16cf2ce9c28396d77e4d87f64a8764e464736f6c63430008140033