0x60806040523480156200001157600080fd5b5060405162001e7438038062001e74833981810160405281019062000037919062000211565b8160029081620000489190620004e1565b5080600390816200005a9190620004e1565b506200006b6200007960201b60201c565b6000819055505050620005c8565b600090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620000e7826200009c565b810181811067ffffffffffffffff82111715620001095762000108620000ad565b5b80604052505050565b60006200011e6200007e565b90506200012c8282620000dc565b919050565b600067ffffffffffffffff8211156200014f576200014e620000ad565b5b6200015a826200009c565b9050602081019050919050565b60005b83811015620001875780820151818401526020810190506200016a565b60008484015250505050565b6000620001aa620001a48462000131565b62000112565b905082815260208101848484011115620001c957620001c862000097565b5b620001d684828562000167565b509392505050565b600082601f830112620001f657620001f562000092565b5b81516200020884826020860162000193565b91505092915050565b600080604083850312156200022b576200022a62000088565b5b600083015167ffffffffffffffff8111156200024c576200024b6200008d565b5b6200025a85828601620001de565b925050602083015167ffffffffffffffff8111156200027e576200027d6200008d565b5b6200028c85828601620001de565b9150509250929050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620002e957607f821691505b602082108103620002ff57620002fe620002a1565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620003697fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200032a565b6200037586836200032a565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620003c2620003bc620003b6846200038d565b62000397565b6200038d565b9050919050565b6000819050919050565b620003de83620003a1565b620003f6620003ed82620003c9565b84845462000337565b825550505050565b600090565b6200040d620003fe565b6200041a818484620003d3565b505050565b5b8181101562000442576200043660008262000403565b60018101905062000420565b5050565b601f82111562000491576200045b8162000305565b62000466846200031a565b8101602085101562000476578190505b6200048e62000485856200031a565b8301826200041f565b50505b505050565b600082821c905092915050565b6000620004b66000198460080262000496565b1980831691505092915050565b6000620004d18383620004a3565b9150826002028217905092915050565b620004ec8262000296565b67ffffffffffffffff811115620005085762000507620000ad565b5b620005148254620002d0565b6200052182828562000446565b600060209050601f83116001811462000559576000841562000544578287015190505b620005508582620004c3565b865550620005c0565b601f198416620005698662000305565b60005b8281101562000593578489015182556001820191506020850194506020810190506200056c565b86831015620005b35784890151620005af601f891682620004a3565b8355505b6001600288020188555050505b505050505050565b61189c80620005d86000396000f3fe6080604052600436106100dd5760003560e01c80636352211e1161007f578063a22cb46511610059578063a22cb465146102ab578063b88d4fde146102d4578063c87b56dd146102f0578063e985e9c51461032d576100dd565b80636352211e1461020657806370a082311461024357806395d89b4114610280576100dd565b8063095ea7b3116100bb578063095ea7b31461018757806318160ddd146101a357806323b872dd146101ce57806342842e0e146101ea576100dd565b806301ffc9a7146100e257806306fdde031461011f578063081812fc1461014a575b600080fd5b3480156100ee57600080fd5b506101096004803603810190610104919061111d565b61036a565b6040516101169190611165565b60405180910390f35b34801561012b57600080fd5b506101346103fc565b6040516101419190611210565b60405180910390f35b34801561015657600080fd5b50610171600480360381019061016c9190611268565b61048e565b60405161017e91906112d6565b60405180910390f35b6101a1600480360381019061019c919061131d565b6104ec565b005b3480156101af57600080fd5b506101b86104fc565b6040516101c5919061136c565b60405180910390f35b6101e860048036038101906101e39190611387565b610513565b005b61020460048036038101906101ff9190611387565b6107d4565b005b34801561021257600080fd5b5061022d60048036038101906102289190611268565b6107f4565b60405161023a91906112d6565b60405180910390f35b34801561024f57600080fd5b5061026a600480360381019061026591906113da565b610806565b604051610277919061136c565b60405180910390f35b34801561028c57600080fd5b5061029561089d565b6040516102a29190611210565b60405180910390f35b3480156102b757600080fd5b506102d260048036038101906102cd9190611433565b61092f565b005b6102ee60048036038101906102e991906115a8565b610a3a565b005b3480156102fc57600080fd5b5061031760048036038101906103129190611268565b610a8c565b6040516103249190611210565b60405180910390f35b34801561033957600080fd5b50610354600480360381019061034f919061162b565b610b09565b6040516103619190611165565b60405180910390f35b60006301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806103c557506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806103f55750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b60606002805461040b9061169a565b80601f01602080910402602001604051908101604052809291908181526020018280546104379061169a565b80156104845780601f1061045957610100808354040283529160200191610484565b820191906000526020600020905b81548152906001019060200180831161046757829003601f168201915b5050505050905090565b600061049982610b9d565b6104ae576104ad63cf4700e460e01b610c16565b5b6006600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6104f882826001610c20565b5050565b6000610506610d4f565b6001546000540303905090565b600061051e82610d54565b905073ffffffffffffffffffffffffffffffffffffffff8473ffffffffffffffffffffffffffffffffffffffff161693508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146105935761059263a114810060e01b610c16565b5b60008061059f84610e40565b915091506105b581876105b0610e67565b610e6f565b6105e0576105ca866105c5610e67565b610b09565b6105df576105de6359c896be60e01b610c16565b5b5b6105ed8686866001610eb3565b80156105f857600082555b600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546001900391905081905550600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154600101919050819055506106c6856106a2888887610eb9565b7c020000000000000000000000000000000000000000000000000000000017610ee1565b600460008681526020019081526020016000208190555060007c020000000000000000000000000000000000000000000000000000000084160361074c576000600185019050600060046000838152602001908152602001600020540361074a576000548114610749578360046000838152602001908152602001600020819055505b5b505b600073ffffffffffffffffffffffffffffffffffffffff8673ffffffffffffffffffffffffffffffffffffffff161690508481887fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a4600081036107be576107bd63ea553b3460e01b610c16565b5b6107cb8787876001610f0c565b50505050505050565b6107ef83838360405180602001604052806000815250610a3a565b505050565b60006107ff82610d54565b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361084c5761084b638f4eb60460e01b610c16565b5b67ffffffffffffffff600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054169050919050565b6060600380546108ac9061169a565b80601f01602080910402602001604051908101604052809291908181526020018280546108d89061169a565b80156109255780601f106108fa57610100808354040283529160200191610925565b820191906000526020600020905b81548152906001019060200180831161090857829003601f168201915b5050505050905090565b806007600061093c610e67565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166109e9610e67565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610a2e9190611165565b60405180910390a35050565b610a45848484610513565b60008373ffffffffffffffffffffffffffffffffffffffff163b14610a8657610a7084848484610f12565b610a8557610a8463d1a57ed660e01b610c16565b5b5b50505050565b6060610a9782610b9d565b610aac57610aab63a14c4b5060e01b610c16565b5b6000610ab6611041565b90506000815103610ad65760405180602001604052806000815250610b01565b80610ae084611058565b604051602001610af1929190611707565b6040516020818303038152906040525b915050919050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600081610ba8610d4f565b11610c1157600054821015610c105760005b6000600460008581526020019081526020016000205491508103610be95782610be29061175a565b9250610bba565b60007c01000000000000000000000000000000000000000000000000000000008216149150505b5b919050565b8060005260046000fd5b6000610c2b836107f4565b9050818015610c6d57508073ffffffffffffffffffffffffffffffffffffffff16610c54610e67565b73ffffffffffffffffffffffffffffffffffffffff1614155b15610c9957610c8381610c7e610e67565b610b09565b610c9857610c9763cfb3b94260e01b610c16565b5b5b836006600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550828473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a450505050565b600090565b600081610d5f610d4f565b11610e2a576004600083815260200190815260200160002054905060008103610e01576000548210610d9c57610d9b63df2d9b4260e01b610c16565b5b5b60046000836001900393508381526020019081526020016000205490506000810315610dfc5760007c010000000000000000000000000000000000000000000000000000000082160315610e3b57610dfb63df2d9b4260e01b610c16565b5b610d9d565b60007c010000000000000000000000000000000000000000000000000000000082160315610e3b575b610e3a63df2d9b4260e01b610c16565b5b919050565b60008060006006600085815260200190815260200160002090508092508254915050915091565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff8316925073ffffffffffffffffffffffffffffffffffffffff821691508382148383141790509392505050565b50505050565b60008060e883901c905060e8610ed08686846110a8565b62ffffff16901b9150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff83169250814260a01b178317905092915050565b50505050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02610f38610e67565b8786866040518563ffffffff1660e01b8152600401610f5a94939291906117d8565b6020604051808303816000875af1925050508015610f9657506040513d601f19601f82011682018060405250810190610f939190611839565b60015b610fee573d8060008114610fc6576040519150601f19603f3d011682016040523d82523d6000602084013e610fcb565b606091505b506000815103610fe657610fe563d1a57ed660e01b610c16565b5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b606060405180602001604052806000815250905090565b606060a060405101806040526020810391506000825281835b60011561109357600184039350600a81066030018453600a8104905080611071575b50828103602084039350808452505050919050565b60009392505050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6110fa816110c5565b811461110557600080fd5b50565b600081359050611117816110f1565b92915050565b600060208284031215611133576111326110bb565b5b600061114184828501611108565b91505092915050565b60008115159050919050565b61115f8161114a565b82525050565b600060208201905061117a6000830184611156565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156111ba57808201518184015260208101905061119f565b60008484015250505050565b6000601f19601f8301169050919050565b60006111e282611180565b6111ec818561118b565b93506111fc81856020860161119c565b611205816111c6565b840191505092915050565b6000602082019050818103600083015261122a81846111d7565b905092915050565b6000819050919050565b61124581611232565b811461125057600080fd5b50565b6000813590506112628161123c565b92915050565b60006020828403121561127e5761127d6110bb565b5b600061128c84828501611253565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006112c082611295565b9050919050565b6112d0816112b5565b82525050565b60006020820190506112eb60008301846112c7565b92915050565b6112fa816112b5565b811461130557600080fd5b50565b600081359050611317816112f1565b92915050565b60008060408385031215611334576113336110bb565b5b600061134285828601611308565b925050602061135385828601611253565b9150509250929050565b61136681611232565b82525050565b6000602082019050611381600083018461135d565b92915050565b6000806000606084860312156113a05761139f6110bb565b5b60006113ae86828701611308565b93505060206113bf86828701611308565b92505060406113d086828701611253565b9150509250925092565b6000602082840312156113f0576113ef6110bb565b5b60006113fe84828501611308565b91505092915050565b6114108161114a565b811461141b57600080fd5b50565b60008135905061142d81611407565b92915050565b6000806040838503121561144a576114496110bb565b5b600061145885828601611308565b92505060206114698582860161141e565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6114b5826111c6565b810181811067ffffffffffffffff821117156114d4576114d361147d565b5b80604052505050565b60006114e76110b1565b90506114f382826114ac565b919050565b600067ffffffffffffffff8211156115135761151261147d565b5b61151c826111c6565b9050602081019050919050565b82818337600083830152505050565b600061154b611546846114f8565b6114dd565b90508281526020810184848401111561156757611566611478565b5b611572848285611529565b509392505050565b600082601f83011261158f5761158e611473565b5b813561159f848260208601611538565b91505092915050565b600080600080608085870312156115c2576115c16110bb565b5b60006115d087828801611308565b94505060206115e187828801611308565b93505060406115f287828801611253565b925050606085013567ffffffffffffffff811115611613576116126110c0565b5b61161f8782880161157a565b91505092959194509250565b60008060408385031215611642576116416110bb565b5b600061165085828601611308565b925050602061166185828601611308565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806116b257607f821691505b6020821081036116c5576116c461166b565b5b50919050565b600081905092915050565b60006116e182611180565b6116eb81856116cb565b93506116fb81856020860161119c565b80840191505092915050565b600061171382856116d6565b915061171f82846116d6565b91508190509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061176582611232565b9150600082036117785761177761172b565b5b600182039050919050565b600081519050919050565b600082825260208201905092915050565b60006117aa82611783565b6117b4818561178e565b93506117c481856020860161119c565b6117cd816111c6565b840191505092915050565b60006080820190506117ed60008301876112c7565b6117fa60208301866112c7565b611807604083018561135d565b8181036060830152611819818461179f565b905095945050505050565b600081519050611833816110f1565b92915050565b60006020828403121561184f5761184e6110bb565b5b600061185d84828501611824565b9150509291505056fea2646970667358221220655515c9bd1cc76a28b8ef9ec994c1e4595e82df202228ef56a2969d7fd9146864736f6c634300081200330000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000