0x60806040523480156200001157600080fd5b506040518060400160405280600d81526020017f596f7572204e657874204e4654000000000000000000000000000000000000008152506040518060400160405280600781526020017f4e46544e4558540000000000000000000000000000000000000000000000000081525081600290816200008f91906200033f565b508060039081620000a191906200033f565b50620000b2620000c060201b60201c565b600081905550505062000426565b600090565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200014757607f821691505b6020821081036200015d576200015c620000ff565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620001c77fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000188565b620001d3868362000188565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620002206200021a6200021484620001eb565b620001f5565b620001eb565b9050919050565b6000819050919050565b6200023c83620001ff565b620002546200024b8262000227565b84845462000195565b825550505050565b600090565b6200026b6200025c565b6200027881848462000231565b505050565b5b81811015620002a0576200029460008262000261565b6001810190506200027e565b5050565b601f821115620002ef57620002b98162000163565b620002c48462000178565b81016020851015620002d4578190505b620002ec620002e38562000178565b8301826200027d565b50505b505050565b600082821c905092915050565b60006200031460001984600802620002f4565b1980831691505092915050565b60006200032f838362000301565b9150826002028217905092915050565b6200034a82620000c5565b67ffffffffffffffff811115620003665762000365620000d0565b5b6200037282546200012e565b6200037f828285620002a4565b600060209050601f831160018114620003b75760008415620003a2578287015190505b620003ae858262000321565b8655506200041e565b601f198416620003c78662000163565b60005b82811015620003f157848901518255600182019150602085019450602081019050620003ca565b868310156200041157848901516200040d601f89168262000301565b8355505b6001600288020188555050505b505050505050565b611bc580620004366000396000f3fe6080604052600436106100e85760003560e01c80636352211e1161008a578063a22cb46511610059578063a22cb465146102d2578063b88d4fde146102fb578063c87b56dd14610317578063e985e9c514610354576100e8565b80636352211e1461021157806370a082311461024e57806395d89b411461028b578063a0712d68146102b6576100e8565b8063095ea7b3116100c6578063095ea7b31461019257806318160ddd146101ae57806323b872dd146101d957806342842e0e146101f5576100e8565b806301ffc9a7146100ed57806306fdde031461012a578063081812fc14610155575b600080fd5b3480156100f957600080fd5b50610114600480360381019061010f919061149e565b610391565b60405161012191906114e6565b60405180910390f35b34801561013657600080fd5b5061013f610423565b60405161014c9190611591565b60405180910390f35b34801561016157600080fd5b5061017c600480360381019061017791906115e9565b6104b5565b6040516101899190611657565b60405180910390f35b6101ac60048036038101906101a7919061169e565b610534565b005b3480156101ba57600080fd5b506101c3610678565b6040516101d091906116ed565b60405180910390f35b6101f360048036038101906101ee9190611708565b61068f565b005b61020f600480360381019061020a9190611708565b6109b1565b005b34801561021d57600080fd5b50610238600480360381019061023391906115e9565b6109d1565b6040516102459190611657565b60405180910390f35b34801561025a57600080fd5b506102756004803603810190610270919061175b565b6109e3565b60405161028291906116ed565b60405180910390f35b34801561029757600080fd5b506102a0610a9b565b6040516102ad9190611591565b60405180910390f35b6102d060048036038101906102cb91906115e9565b610b2d565b005b3480156102de57600080fd5b506102f960048036038101906102f491906117b4565b610b3a565b005b61031560048036038101906103109190611929565b610c45565b005b34801561032357600080fd5b5061033e600480360381019061033991906115e9565b610cb8565b60405161034b9190611591565b60405180910390f35b34801561036057600080fd5b5061037b600480360381019061037691906119ac565b610d56565b60405161038891906114e6565b60405180910390f35b60006301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806103ec57506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061041c5750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b60606002805461043290611a1b565b80601f016020809104026020016040519081016040528092919081815260200182805461045e90611a1b565b80156104ab5780601f10610480576101008083540402835291602001916104ab565b820191906000526020600020905b81548152906001019060200180831161048e57829003601f168201915b5050505050905090565b60006104c082610dea565b6104f6576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061053f826109d1565b90508073ffffffffffffffffffffffffffffffffffffffff16610560610e49565b73ffffffffffffffffffffffffffffffffffffffff16146105c35761058c81610587610e49565b610d56565b6105c2576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b826006600084815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000610682610e51565b6001546000540303905090565b600061069a82610e56565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610701576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008061070d84610f22565b91509150610723818761071e610e49565b610f49565b61076f5761073886610733610e49565b610d56565b61076e576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16036107d5576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107e28686866001610f8d565b80156107ed57600082555b600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546001900391905081905550600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154600101919050819055506108bb85610897888887610f93565b7c020000000000000000000000000000000000000000000000000000000017610fbb565b600460008681526020019081526020016000208190555060007c0200000000000000000000000000000000000000000000000000000000841603610941576000600185019050600060046000838152602001908152602001600020540361093f57600054811461093e578360046000838152602001908152602001600020819055505b5b505b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46109a98686866001610fe6565b505050505050565b6109cc83838360405180602001604052806000815250610c45565b505050565b60006109dc82610e56565b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610a4a576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054169050919050565b606060038054610aaa90611a1b565b80601f0160208091040260200160405190810160405280929190818152602001828054610ad690611a1b565b8015610b235780601f10610af857610100808354040283529160200191610b23565b820191906000526020600020905b815481529060010190602001808311610b0657829003601f168201915b5050505050905090565b610b373382610fec565b50565b8060076000610b47610e49565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16610bf4610e49565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610c3991906114e6565b60405180910390a35050565b610c5084848461068f565b60008373ffffffffffffffffffffffffffffffffffffffff163b14610cb257610c7b8484848461100a565b610cb1576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b6060610cc382610dea565b610cf9576040517fa14c4b5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610d0361115a565b90506000815103610d235760405180602001604052806000815250610d4e565b80610d2d84611171565b604051602001610d3e929190611a88565b6040516020818303038152906040525b915050919050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600081610df5610e51565b11158015610e04575060005482105b8015610e42575060007c0100000000000000000000000000000000000000000000000000000000600460008581526020019081526020016000205416145b9050919050565b600033905090565b600090565b60008082905080610e65610e51565b11610eeb57600054811015610eea5760006004600083815260200190815260200160002054905060007c0100000000000000000000000000000000000000000000000000000000821603610ee8575b60008103610ede576004600083600190039350838152602001908152602001600020549050610eb4565b8092505050610f1d565b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b60008060006006600085815260200190815260200160002090508092508254915050915091565b600073ffffffffffffffffffffffffffffffffffffffff8316925073ffffffffffffffffffffffffffffffffffffffff821691508382148383141790509392505050565b50505050565b60008060e883901c905060e8610faa8686846111c1565b62ffffff16901b9150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff83169250814260a01b178317905092915050565b50505050565b6110068282604051806020016040528060008152506111ca565b5050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611030610e49565b8786866040518563ffffffff1660e01b81526004016110529493929190611b01565b6020604051808303816000875af192505050801561108e57506040513d601f19601f8201168201806040525081019061108b9190611b62565b60015b611107573d80600081146110be576040519150601f19603f3d011682016040523d82523d6000602084013e6110c3565b606091505b5060008151036110ff576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b606060405180602001604052806000815250905090565b606060a060405101806040526020810391506000825281835b6001156111ac57600184039350600a81066030018453600a810490508061118a575b50828103602084039350808452505050919050565b60009392505050565b6111d48383611267565b60008373ffffffffffffffffffffffffffffffffffffffff163b1461126257600080549050600083820390505b611214600086838060010194508661100a565b61124a576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81811061120157816000541461125f57600080fd5b50505b505050565b600080549050600082036112a7576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112b46000848385610f8d565b600160406001901b178202600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555061132b8361131c6000866000610f93565b61132585611422565b17610fbb565b6004600083815260200190815260200160002081905550600080838301905073ffffffffffffffffffffffffffffffffffffffff85169150828260007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a4600183015b8181146113cc57808360007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a4600181019050611391565b5060008203611407576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600081905550505061141d6000848385610fe6565b505050565b60006001821460e11b9050919050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61147b81611446565b811461148657600080fd5b50565b60008135905061149881611472565b92915050565b6000602082840312156114b4576114b361143c565b5b60006114c284828501611489565b91505092915050565b60008115159050919050565b6114e0816114cb565b82525050565b60006020820190506114fb60008301846114d7565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561153b578082015181840152602081019050611520565b60008484015250505050565b6000601f19601f8301169050919050565b600061156382611501565b61156d818561150c565b935061157d81856020860161151d565b61158681611547565b840191505092915050565b600060208201905081810360008301526115ab8184611558565b905092915050565b6000819050919050565b6115c6816115b3565b81146115d157600080fd5b50565b6000813590506115e3816115bd565b92915050565b6000602082840312156115ff576115fe61143c565b5b600061160d848285016115d4565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061164182611616565b9050919050565b61165181611636565b82525050565b600060208201905061166c6000830184611648565b92915050565b61167b81611636565b811461168657600080fd5b50565b60008135905061169881611672565b92915050565b600080604083850312156116b5576116b461143c565b5b60006116c385828601611689565b92505060206116d4858286016115d4565b9150509250929050565b6116e7816115b3565b82525050565b600060208201905061170260008301846116de565b92915050565b6000806000606084860312156117215761172061143c565b5b600061172f86828701611689565b935050602061174086828701611689565b9250506040611751868287016115d4565b9150509250925092565b6000602082840312156117715761177061143c565b5b600061177f84828501611689565b91505092915050565b611791816114cb565b811461179c57600080fd5b50565b6000813590506117ae81611788565b92915050565b600080604083850312156117cb576117ca61143c565b5b60006117d985828601611689565b92505060206117ea8582860161179f565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61183682611547565b810181811067ffffffffffffffff82111715611855576118546117fe565b5b80604052505050565b6000611868611432565b9050611874828261182d565b919050565b600067ffffffffffffffff821115611894576118936117fe565b5b61189d82611547565b9050602081019050919050565b82818337600083830152505050565b60006118cc6118c784611879565b61185e565b9050828152602081018484840111156118e8576118e76117f9565b5b6118f38482856118aa565b509392505050565b600082601f8301126119105761190f6117f4565b5b81356119208482602086016118b9565b91505092915050565b600080600080608085870312156119435761194261143c565b5b600061195187828801611689565b945050602061196287828801611689565b9350506040611973878288016115d4565b925050606085013567ffffffffffffffff81111561199457611993611441565b5b6119a0878288016118fb565b91505092959194509250565b600080604083850312156119c3576119c261143c565b5b60006119d185828601611689565b92505060206119e285828601611689565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611a3357607f821691505b602082108103611a4657611a456119ec565b5b50919050565b600081905092915050565b6000611a6282611501565b611a6c8185611a4c565b9350611a7c81856020860161151d565b80840191505092915050565b6000611a948285611a57565b9150611aa08284611a57565b91508190509392505050565b600081519050919050565b600082825260208201905092915050565b6000611ad382611aac565b611add8185611ab7565b9350611aed81856020860161151d565b611af681611547565b840191505092915050565b6000608082019050611b166000830187611648565b611b236020830186611648565b611b3060408301856116de565b8181036060830152611b428184611ac8565b905095945050505050565b600081519050611b5c81611472565b92915050565b600060208284031215611b7857611b7761143c565b5b6000611b8684828501611b4d565b9150509291505056fea2646970667358221220cc762cf6af42a40f89e7a0c1e9a029f323fccb76a5fd85e02fb7ec7a81cf10a664736f6c63430008120033