0x608060405234801561001057600080fd5b50614fd1806100206000396000f3fe608060405234801561001057600080fd5b50600436106101f05760003560e01c806370a082311161010f578063c87b56dd116100a2578063dd5603f911610071578063dd5603f914610639578063eac449d914610655578063eb31403f14610671578063f5b541a6146106a1576101f0565b8063c87b56dd1461058d578063d547741f146105bd578063d9c05870146105d9578063db615be114610609576101f0565b806391d14854116100de57806391d14854146104f157806395d89b4114610521578063a217fddf1461053f578063aff5a4151461055d576101f0565b806370a0823114610459578063773c02d4146104895780637d39da34146104b957806388e18020146104d5576101f0565b806330176e131161018757806349efc1351161015657806349efc135146103995780636352211e146103c95780636c60144a146103f95780636d70f7ae14610429576101f0565b806330176e131461031557806336568abe14610331578063383505411461034d57806342966c681461037d576101f0565b8063248a9ca3116101c3578063248a9ca31461027d57806324d7806c146102ad5780632b85c710146102dd5780632f2ff15d146102f9576101f0565b806301ffc9a7146101f557806306fdde0314610225578063077f224a1461024357806318160ddd1461025f575b600080fd5b61020f600480360381019061020a919061322c565b6106bf565b60405161021c9190613274565b60405180910390f35b61022d6107a1565b60405161023a919061331f565b60405180910390f35b61025d600480360381019061025891906134d4565b61082f565b005b610267610982565b6040516102749190613578565b60405180910390f35b610297600480360381019061029291906135c9565b610993565b6040516102a49190613605565b60405180910390f35b6102c760048036038101906102c29190613620565b6109b3565b6040516102d49190613274565b60405180910390f35b6102f760048036038101906102f29190613679565b6109c9565b005b610313600480360381019061030e91906136a6565b610a45565b005b61032f600480360381019061032a9190613746565b610a66565b005b61034b600480360381019061034691906136a6565b610a8a565b005b61036760048036038101906103629190613679565b610b0d565b60405161037491906137a2565b60405180910390f35b61039760048036038101906103929190613679565b610b61565b005b6103b360048036038101906103ae9190613620565b610d8c565b6040516103c09190613578565b60405180910390f35b6103e360048036038101906103de9190613679565b610ff3565b6040516103f091906137a2565b60405180910390f35b610413600480360381019061040e9190613813565b611047565b604051610420919061391e565b60405180910390f35b610443600480360381019061043e9190613620565b61113f565b6040516104509190613274565b60405180910390f35b610473600480360381019061046e9190613620565b611172565b6040516104809190613578565b60405180910390f35b6104a3600480360381019061049e9190613620565b6111a6565b6040516104b09190613578565b60405180910390f35b6104d360048036038101906104ce9190613996565b6111dd565b005b6104ef60048036038101906104ea9190613a39565b611396565b005b61050b600480360381019061050691906136a6565b61151e565b6040516105189190613274565b60405180910390f35b610529611589565b604051610536919061331f565b60405180910390f35b610547611617565b6040516105549190613605565b60405180910390f35b61057760048036038101906105729190613679565b61161e565b6040516105849190613c92565b60405180910390f35b6105a760048036038101906105a29190613679565b6118a5565b6040516105b4919061331f565b60405180910390f35b6105d760048036038101906105d291906136a6565b611905565b005b6105f360048036038101906105ee9190613813565b611926565b604051610600919061391e565b60405180910390f35b610623600480360381019061061e9190613620565b611a35565b6040516106309190613578565b60405180910390f35b610653600480360381019061064e9190613d0a565b611a69565b005b61066f600480360381019061066a9190613d57565b611dbc565b005b61068b60048036038101906106869190613620565b611fff565b6040516106989190613578565b60405180910390f35b6106a961203c565b6040516106b69190613605565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061078a57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061079a575061079982612060565b5b9050919050565b609e80546107ae90613dc6565b80601f01602080910402602001604051908101604052809291908181526020018280546107da90613dc6565b80156108275780601f106107fc57610100808354040283529160200191610827565b820191906000526020600020905b81548152906001019060200180831161080a57829003601f168201915b505050505081565b6001600060019054906101000a900460ff1615801561086057508060ff1660008054906101000a900460ff1660ff16105b61089f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161089690613e69565b60405180910390fd5b806000806101000a81548160ff021916908360ff1602179055506001600060016101000a81548160ff02191690831515021790555083609e90816108e39190614035565b5082609f90816108f39190614035565b506109016000801b836120da565b61092b7f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b929836120da565b60008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498816040516109749190614123565b60405180910390a150505050565b600061098e609d6121bb565b905090565b600060656000838152602001908152602001600020600101549050919050565b60006109c26000801b8361151e565b9050919050565b7f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b9296109f3816121c9565b60a1600083815260200190815260200160002060008082016000610a17919061309d565b6001820160009055600282016000610a2f919061309d565b600382016000610a3f91906130dd565b50505050565b610a4e82610993565b610a57816121c9565b610a6183836120da565b505050565b6000801b610a73816121c9565b828260a09182610a84929190614149565b50505050565b610a926121dd565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610aff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af69061428b565b60405180910390fd5b610b0982826121e5565b5050565b6000610b5a826040518060400160405280600f81526020017f496e76616c696420746f6b656e4964000000000000000000000000000000000081525060976122c79092919063ffffffff16565b9050919050565b6000610b6b6121dd565b90508073ffffffffffffffffffffffffffffffffffffffff16610b8d83610b0d565b73ffffffffffffffffffffffffffffffffffffffff1614610be3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bda906142f7565b60405180910390fd5b610bf781609a6122e690919063ffffffff16565b610c36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2d90614389565b60405180910390fd5b6000610c4c82609a61231690919063ffffffff16565b905080610c8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c85906143f5565b60405180910390fd5b6000610ca484609761234690919063ffffffff16565b905080610ce6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cdd90614461565b60405180910390fd5b838373ffffffffffffffffffffffffffffffffffffffff167fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca560405160405180910390a383600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a450505050565b60007f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b929610db8816121c9565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610e27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1e906144cd565b60405180910390fd5b610e3b83609a6122e690919063ffffffff16565b15610e7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7290614539565b60405180910390fd5b610e85609d612360565b6000610e91609d6121bb565b90506000610eab8583609a6123769092919063ffffffff16565b905080610eed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee4906145a5565b60405180910390fd5b6000610f05838760976123ab9092919063ffffffff16565b905080610f47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3e90614611565b60405180910390fd5b828673ffffffffffffffffffffffffffffffffffffffff167fe9274a84b19e9428826de6bae8c48329354f8f0e73f771b97cae2d9dccd45a2760405160405180910390a3828673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a482945050505050919050565b6000611040826040518060400160405280600f81526020017f496e76616c696420746f6b656e4964000000000000000000000000000000000081525060976122c79092919063ffffffff16565b9050919050565b60607f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b929611073816121c9565b60008484905067ffffffffffffffff8111156110925761109161334b565b5b6040519080825280602002602001820160405280156110c05781602001602082028036833780820191505090505b50905060005b85859050811015611133576111018686838181106110e7576110e6614631565b5b90506020020160208101906110fc9190613620565b610d8c565b82828151811061111457611113614631565b5b602002602001018181525050808061112b9061468f565b9150506110c6565b50809250505092915050565b600061116b7f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b9298361151e565b9050919050565b60008061118983609a6123e090919063ffffffff16565b5090508061119857600061119b565b60015b60ff16915050919050565b60006111d682604051806060016040528060258152602001614f7760259139609a6124229092919063ffffffff16565b9050919050565b7f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b929611207816121c9565b60005b838390508110156113905761125184848381811061122b5761122a614631565b5b905060200281019061123d91906146e6565b60000135609761245790919063ffffffff16565b1561137d574284848381811061126a57611269614631565b5b905060200281019061127c91906146e6565b60400135111561137d5761137c84848381811061129c5761129b614631565b5b90506020028101906112ae91906146e6565b600001358585848181106112c5576112c4614631565b5b90506020028101906112d791906146e6565b80602001906112e6919061470e565b8787868181106112f9576112f8614631565b5b905060200281019061130b91906146e6565b6040013588888781811061132257611321614631565b5b905060200281019061133491906146e6565b8060600190611343919061470e565b8a8a8981811061135657611355614631565b5b905060200281019061136891906146e6565b80608001906113779190614771565b612471565b5b80806113889061468f565b91505061120a565b50505050565b7f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b9296113c0816121c9565b6113d489609761245790919063ffffffff16565b611413576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140a90614820565b60405180910390fd5b428611611455576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144c906148b2565b60405180910390fd5b600060a160008b8152602001908152602001600020600001805461147890613dc6565b90501461150357878760405161148f929190614902565b604051809103902060a160008b81526020019081526020016000206000016040516114ba91906149b3565b604051809103902014611502576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f990614a16565b60405180910390fd5b5b6115138989898989898989612471565b505050505050505050565b60006065600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b609f805461159690613dc6565b80601f01602080910402602001604051908101604052809291908181526020018280546115c290613dc6565b801561160f5780601f106115e45761010080835404028352916020019161160f565b820191906000526020600020905b8154815290600101906020018083116115f257829003601f168201915b505050505081565b6000801b81565b6116266130fe565b61163a82609761245790919063ffffffff16565b611679576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167090614820565b60405180910390fd5b60a160008381526020019081526020016000206040518060800160405290816000820180546116a790613dc6565b80601f01602080910402602001604051908101604052809291908181526020018280546116d390613dc6565b80156117205780601f106116f557610100808354040283529160200191611720565b820191906000526020600020905b81548152906001019060200180831161170357829003601f168201915b505050505081526020016001820154815260200160028201805461174390613dc6565b80601f016020809104026020016040519081016040528092919081815260200182805461176f90613dc6565b80156117bc5780601f10611791576101008083540402835291602001916117bc565b820191906000526020600020905b81548152906001019060200180831161179f57829003601f168201915b5050505050815260200160038201805480602002602001604051908101604052809291908181526020016000905b8282101561189657838290600052602060002001805461180990613dc6565b80601f016020809104026020016040519081016040528092919081815260200182805461183590613dc6565b80156118825780601f1061185757610100808354040283529160200191611882565b820191906000526020600020905b81548152906001019060200180831161186557829003601f168201915b5050505050815260200190600101906117ea565b50505050815250509050919050565b6060600060a080546118b690613dc6565b9050116118d257604051806020016040528060008152506118fe565b60a06118dd83612599565b6040516020016118ee929190614af5565b6040516020818303038152906040525b9050919050565b61190e82610993565b611917816121c9565b61192183836121e5565b505050565b606060008383905067ffffffffffffffff8111156119475761194661334b565b5b6040519080825280602002602001820160405280156119755781602001602082028036833780820191505090505b50905060005b84849050811015611a2a576000806119c487878581811061199f5761199e614631565b5b90506020020160208101906119b49190613620565b609a6123e090919063ffffffff16565b9150915081156119f357808484815181106119e2576119e1614631565b5b602002602001018181525050611a15565b6000848481518110611a0857611a07614631565b5b6020026020010181815250505b50508080611a229061468f565b91505061197b565b508091505092915050565b600080611a4c83609a6123e090919063ffffffff16565b50905080611a5b576000611a5e565b60015b60ff16915050919050565b611a9a7f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b929611a956121dd565b61151e565b611ad9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad090614b65565b60405180910390fd5b6005828290501115611b20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1790614bf7565b60405180910390fd5b60005b82829050811015611db7576000611b6f848484818110611b4657611b45614631565b5b9050602002810190611b589190614c17565b6000016020810190611b6a9190613620565b612667565b9050611bbb848484818110611b8757611b86614631565b5b9050602002810190611b999190614c17565b6000016020810190611bab9190613620565b609a6122e690919063ffffffff16565b611bc55750611daa565b42848484818110611bd957611bd8614631565b5b9050602002810190611beb9190614c17565b6040013511611bfa5750611daa565b600060a160008381526020019081526020016000206000018054611c1d90613dc6565b905014611cda57838383818110611c3757611c36614631565b5b9050602002810190611c499190614c17565b8060200190611c58919061470e565b604051611c66929190614902565b604051809103902060a16000838152602001908152602001600020600001604051611c9191906149b3565b604051809103902014611cd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd090614a16565b60405180910390fd5b5b611da881858585818110611cf157611cf0614631565b5b9050602002810190611d039190614c17565b8060200190611d12919061470e565b878787818110611d2557611d24614631565b5b9050602002810190611d379190614c17565b60400135888888818110611d4e57611d4d614631565b5b9050602002810190611d609190614c17565b8060600190611d6f919061470e565b8a8a8a818110611d8257611d81614631565b5b9050602002810190611d949190614c17565b8060800190611da39190614771565b612471565b505b8080600101915050611b23565b505050565b7f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b929611de6816121c9565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611e55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4c906144cd565b60405180910390fd5b611e6983609a6122e690919063ffffffff16565b611ea8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9f90614389565b60405180910390fd5b6000611ebe84609a61231690919063ffffffff16565b905080611f00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef7906143f5565b60405180910390fd5b6000611f1684609761234690919063ffffffff16565b905080611f58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4f90614461565b60405180910390fd5b838573ffffffffffffffffffffffffffffffffffffffff167fec9ab91322523c899ede7830ec9bfc992b5981cdcc27b91162fb23de5791117b60405160405180910390a383600073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050505050565b60007f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b92961202b816121c9565b61203483610d8c565b915050919050565b7f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b92981565b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806120d357506120d2826128a2565b5b9050919050565b6120e4828261151e565b6121b75760016065600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061215c6121dd565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b600081600001549050919050565b6121da816121d56121dd565b61290c565b50565b600033905090565b6121ef828261151e565b156122c35760006065600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506122686121dd565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b60006122da846000018460001b84612991565b60001c90509392505050565b600061230e836000018373ffffffffffffffffffffffffffffffffffffffff1660001b612a12565b905092915050565b600061233e836000018373ffffffffffffffffffffffffffffffffffffffff1660001b612a32565b905092915050565b6000612358836000018360001b612a32565b905092915050565b6001816000016000828254019250508190555050565b60006123a2846000018473ffffffffffffffffffffffffffffffffffffffff1660001b8460001b612a6b565b90509392505050565b60006123d7846000018460001b8473ffffffffffffffffffffffffffffffffffffffff1660001b612a6b565b90509392505050565b60008060008061240c866000018673ffffffffffffffffffffffffffffffffffffffff1660001b612aa6565b91509150818160001c9350935050509250929050565b600061244b846000018473ffffffffffffffffffffffffffffffffffffffff1660001b84612991565b60001c90509392505050565b6000612469836000018360001b612a12565b905092915050565b604051806080016040528088888080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050815260200186815260200185858080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505081526020018383906125239190614cf2565b81525060a160008a8152602001908152602001600020600082015181600001908161254e9190614035565b5060208201518160010155604082015181600201908161256e9190614035565b50606082015181600301908051906020019061258b929190613126565b509050505050505050505050565b6060600060016125a884612af5565b01905060008167ffffffffffffffff8111156125c7576125c661334b565b5b6040519080825280601f01601f1916602001820160405280156125f95781602001600182028036833780820191505090505b509050600082602001820190505b60011561265c578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85816126505761264f614d07565b5b04945060008503612607575b819350505050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036126d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ce906144cd565b60405180910390fd5b6126eb82609a6122e690919063ffffffff16565b1561272b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161272290614539565b60405180910390fd5b612735609d612360565b6000612741609d6121bb565b9050600061275b8483609a6123769092919063ffffffff16565b90508061279d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612794906145a5565b60405180910390fd5b60006127b5838660976123ab9092919063ffffffff16565b9050806127f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ee90614611565b60405180910390fd5b828573ffffffffffffffffffffffffffffffffffffffff167fe9274a84b19e9428826de6bae8c48329354f8f0e73f771b97cae2d9dccd45a2760405160405180910390a3828573ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4829350505050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612916828261151e565b61298d5761292381612c48565b6129318360001c6020612c75565b604051602001612942929190614dce565b6040516020818303038152906040526040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612984919061331f565b60405180910390fd5b5050565b6000808460020160008581526020019081526020016000205490506000801b811415806129c457506129c38585612a12565b5b8390612a06576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129fd919061331f565b60405180910390fd5b50809150509392505050565b6000612a2a8284600001612eb190919063ffffffff16565b905092915050565b600082600201600083815260200190815260200160002060009055612a638284600001612ec890919063ffffffff16565b905092915050565b60008184600201600085815260200190815260200160002081905550612a9d8385600001612edf90919063ffffffff16565b90509392505050565b60008060008460020160008581526020019081526020016000205490506000801b8103612ae557612ad78585612a12565b6000801b9250925050612aee565b60018192509250505b9250929050565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310612b53577a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008381612b4957612b48614d07565b5b0492506040810190505b6d04ee2d6d415b85acef81000000008310612b90576d04ee2d6d415b85acef81000000008381612b8657612b85614d07565b5b0492506020810190505b662386f26fc100008310612bbf57662386f26fc100008381612bb557612bb4614d07565b5b0492506010810190505b6305f5e1008310612be8576305f5e1008381612bde57612bdd614d07565b5b0492506008810190505b6127108310612c0d576127108381612c0357612c02614d07565b5b0492506004810190505b60648310612c305760648381612c2657612c25614d07565b5b0492506002810190505b600a8310612c3f576001810190505b80915050919050565b6060612c6e8273ffffffffffffffffffffffffffffffffffffffff16601460ff16612c75565b9050919050565b606060006002836002612c889190614e08565b612c929190614e4a565b67ffffffffffffffff811115612cab57612caa61334b565b5b6040519080825280601f01601f191660200182016040528015612cdd5781602001600182028036833780820191505090505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110612d1557612d14614631565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110612d7957612d78614631565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060006001846002612db99190614e08565b612dc39190614e4a565b90505b6001811115612e63577f3031323334353637383961626364656600000000000000000000000000000000600f861660108110612e0557612e04614631565b5b1a60f81b828281518110612e1c57612e1b614631565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c945080612e5c90614e7e565b9050612dc6565b5060008414612ea7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e9e90614ef3565b60405180910390fd5b8091505092915050565b6000612ec08360000183612ef6565b905092915050565b6000612ed78360000183612f19565b905092915050565b6000612eee836000018361302d565b905092915050565b600080836001016000848152602001908152602001600020541415905092915050565b60008083600101600084815260200190815260200160002054905060008114613021576000600182612f4b9190614f13565b9050600060018660000180549050612f639190614f13565b9050818114612fd2576000866000018281548110612f8457612f83614631565b5b9060005260206000200154905080876000018481548110612fa857612fa7614631565b5b90600052602060002001819055508387600101600083815260200190815260200160002081905550505b85600001805480612fe657612fe5614f47565b5b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050613027565b60009150505b92915050565b60006130398383612ef6565b613092578260000182908060018154018082558091505060019003906000526020600020016000909190919091505582600001805490508360010160008481526020019081526020016000208190555060019050613097565b600090505b92915050565b5080546130a990613dc6565b6000825580601f106130bb57506130da565b601f0160209004906000526020600020908101906130d9919061317f565b5b50565b50805460008255906000526020600020908101906130fb919061319c565b50565b6040518060800160405280606081526020016000815260200160608152602001606081525090565b82805482825590600052602060002090810192821561316e579160200282015b8281111561316d57825182908161315d9190614035565b5091602001919060010190613146565b5b50905061317b919061319c565b5090565b5b80821115613198576000816000905550600101613180565b5090565b5b808211156131bc57600081816131b3919061309d565b5060010161319d565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b613209816131d4565b811461321457600080fd5b50565b60008135905061322681613200565b92915050565b600060208284031215613242576132416131ca565b5b600061325084828501613217565b91505092915050565b60008115159050919050565b61326e81613259565b82525050565b60006020820190506132896000830184613265565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156132c95780820151818401526020810190506132ae565b60008484015250505050565b6000601f19601f8301169050919050565b60006132f18261328f565b6132fb818561329a565b935061330b8185602086016132ab565b613314816132d5565b840191505092915050565b6000602082019050818103600083015261333981846132e6565b905092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613383826132d5565b810181811067ffffffffffffffff821117156133a2576133a161334b565b5b80604052505050565b60006133b56131c0565b90506133c1828261337a565b919050565b600067ffffffffffffffff8211156133e1576133e061334b565b5b6133ea826132d5565b9050602081019050919050565b82818337600083830152505050565b6000613419613414846133c6565b6133ab565b90508281526020810184848401111561343557613434613346565b5b6134408482856133f7565b509392505050565b600082601f83011261345d5761345c613341565b5b813561346d848260208601613406565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006134a182613476565b9050919050565b6134b181613496565b81146134bc57600080fd5b50565b6000813590506134ce816134a8565b92915050565b6000806000606084860312156134ed576134ec6131ca565b5b600084013567ffffffffffffffff81111561350b5761350a6131cf565b5b61351786828701613448565b935050602084013567ffffffffffffffff811115613538576135376131cf565b5b61354486828701613448565b9250506040613555868287016134bf565b9150509250925092565b6000819050919050565b6135728161355f565b82525050565b600060208201905061358d6000830184613569565b92915050565b6000819050919050565b6135a681613593565b81146135b157600080fd5b50565b6000813590506135c38161359d565b92915050565b6000602082840312156135df576135de6131ca565b5b60006135ed848285016135b4565b91505092915050565b6135ff81613593565b82525050565b600060208201905061361a60008301846135f6565b92915050565b600060208284031215613636576136356131ca565b5b6000613644848285016134bf565b91505092915050565b6136568161355f565b811461366157600080fd5b50565b6000813590506136738161364d565b92915050565b60006020828403121561368f5761368e6131ca565b5b600061369d84828501613664565b91505092915050565b600080604083850312156136bd576136bc6131ca565b5b60006136cb858286016135b4565b92505060206136dc858286016134bf565b9150509250929050565b600080fd5b600080fd5b60008083601f84011261370657613705613341565b5b8235905067ffffffffffffffff811115613723576137226136e6565b5b60208301915083600182028301111561373f5761373e6136eb565b5b9250929050565b6000806020838503121561375d5761375c6131ca565b5b600083013567ffffffffffffffff81111561377b5761377a6131cf565b5b613787858286016136f0565b92509250509250929050565b61379c81613496565b82525050565b60006020820190506137b76000830184613793565b92915050565b60008083601f8401126137d3576137d2613341565b5b8235905067ffffffffffffffff8111156137f0576137ef6136e6565b5b60208301915083602082028301111561380c5761380b6136eb565b5b9250929050565b6000806020838503121561382a576138296131ca565b5b600083013567ffffffffffffffff811115613848576138476131cf565b5b613854858286016137bd565b92509250509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6138958161355f565b82525050565b60006138a7838361388c565b60208301905092915050565b6000602082019050919050565b60006138cb82613860565b6138d5818561386b565b93506138e08361387c565b8060005b838110156139115781516138f8888261389b565b9750613903836138b3565b9250506001810190506138e4565b5085935050505092915050565b6000602082019050818103600083015261393881846138c0565b905092915050565b60008083601f84011261395657613955613341565b5b8235905067ffffffffffffffff811115613973576139726136e6565b5b60208301915083602082028301111561398f5761398e6136eb565b5b9250929050565b600080602083850312156139ad576139ac6131ca565b5b600083013567ffffffffffffffff8111156139cb576139ca6131cf565b5b6139d785828601613940565b92509250509250929050565b60008083601f8401126139f9576139f8613341565b5b8235905067ffffffffffffffff811115613a1657613a156136e6565b5b602083019150836020820283011115613a3257613a316136eb565b5b9250929050565b60008060008060008060008060a0898b031215613a5957613a586131ca565b5b6000613a678b828c01613664565b985050602089013567ffffffffffffffff811115613a8857613a876131cf565b5b613a948b828c016136f0565b97509750506040613aa78b828c01613664565b955050606089013567ffffffffffffffff811115613ac857613ac76131cf565b5b613ad48b828c016136f0565b9450945050608089013567ffffffffffffffff811115613af757613af66131cf565b5b613b038b828c016139e3565b92509250509295985092959890939650565b600082825260208201905092915050565b6000613b318261328f565b613b3b8185613b15565b9350613b4b8185602086016132ab565b613b54816132d5565b840191505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6000613b978383613b26565b905092915050565b6000602082019050919050565b6000613bb782613b5f565b613bc18185613b6a565b935083602082028501613bd385613b7b565b8060005b85811015613c0f5784840389528151613bf08582613b8b565b9450613bfb83613b9f565b925060208a01995050600181019050613bd7565b50829750879550505050505092915050565b60006080830160008301518482036000860152613c3e8282613b26565b9150506020830151613c53602086018261388c565b5060408301518482036040860152613c6b8282613b26565b91505060608301518482036060860152613c858282613bac565b9150508091505092915050565b60006020820190508181036000830152613cac8184613c21565b905092915050565b60008083601f840112613cca57613cc9613341565b5b8235905067ffffffffffffffff811115613ce757613ce66136e6565b5b602083019150836020820283011115613d0357613d026136eb565b5b9250929050565b60008060208385031215613d2157613d206131ca565b5b600083013567ffffffffffffffff811115613d3f57613d3e6131cf565b5b613d4b85828601613cb4565b92509250509250929050565b60008060408385031215613d6e57613d6d6131ca565b5b6000613d7c858286016134bf565b9250506020613d8d85828601613664565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613dde57607f821691505b602082108103613df157613df0613d97565b5b50919050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b6000613e53602e8361329a565b9150613e5e82613df7565b604082019050919050565b60006020820190508181036000830152613e8281613e46565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302613eeb7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613eae565b613ef58683613eae565b95508019841693508086168417925050509392505050565b6000819050919050565b6000613f32613f2d613f288461355f565b613f0d565b61355f565b9050919050565b6000819050919050565b613f4c83613f17565b613f60613f5882613f39565b848454613ebb565b825550505050565b600090565b613f75613f68565b613f80818484613f43565b505050565b5b81811015613fa457613f99600082613f6d565b600181019050613f86565b5050565b601f821115613fe957613fba81613e89565b613fc384613e9e565b81016020851015613fd2578190505b613fe6613fde85613e9e565b830182613f85565b50505b505050565b600082821c905092915050565b600061400c60001984600802613fee565b1980831691505092915050565b60006140258383613ffb565b9150826002028217905092915050565b61403e8261328f565b67ffffffffffffffff8111156140575761405661334b565b5b6140618254613dc6565b61406c828285613fa8565b600060209050601f83116001811461409f576000841561408d578287015190505b6140978582614019565b8655506140ff565b601f1984166140ad86613e89565b60005b828110156140d5578489015182556001820191506020850194506020810190506140b0565b868310156140f257848901516140ee601f891682613ffb565b8355505b6001600288020188555050505b505050505050565b600060ff82169050919050565b61411d81614107565b82525050565b60006020820190506141386000830184614114565b92915050565b600082905092915050565b614153838361413e565b67ffffffffffffffff81111561416c5761416b61334b565b5b6141768254613dc6565b614181828285613fa8565b6000601f8311600181146141b0576000841561419e578287013590505b6141a88582614019565b865550614210565b601f1984166141be86613e89565b60005b828110156141e6578489013582556001820191506020850194506020810190506141c1565b8683101561420357848901356141ff601f891682613ffb565b8355505b6001600288020188555050505b50505050505050565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b6000614275602f8361329a565b915061428082614219565b604082019050919050565b600060208201905081810360008301526142a481614268565b9050919050565b7f546865206163636f756e74206d757374206265206f776e657220697473656c66600082015250565b60006142e160208361329a565b91506142ec826142ab565b602082019050919050565b60006020820190508181036000830152614310816142d4565b9050919050565b7f546865206163636f756e7420646f6573206e6f74206861766520746865207a6b60008201527f4d65534254000000000000000000000000000000000000000000000000000000602082015250565b600061437360258361329a565b915061437e82614317565b604082019050919050565b600060208201905081810360008301526143a281614366565b9050919050565b7f5f746f6b656e4d61702e72656d6f7665206572726f7200000000000000000000600082015250565b60006143df60168361329a565b91506143ea826143a9565b602082019050919050565b6000602082019050818103600083015261440e816143d2565b9050919050565b7f5f6f776e65724d61702e72656d6f7665206572726f7200000000000000000000600082015250565b600061444b60168361329a565b915061445682614415565b602082019050919050565b6000602082019050818103600083015261447a8161443e565b9050919050565b7f456d7074792061646472657373206973206e6f7420616c6c6f77656400000000600082015250565b60006144b7601c8361329a565b91506144c282614481565b602082019050919050565b600060208201905081810360008301526144e6816144aa565b9050919050565b7f7a6b4d6553425420616c72656164792065786973747300000000000000000000600082015250565b600061452360168361329a565b915061452e826144ed565b602082019050919050565b6000602082019050818103600083015261455281614516565b9050919050565b7f5f746f6b656e4d61702e736574206572726f7200000000000000000000000000600082015250565b600061458f60138361329a565b915061459a82614559565b602082019050919050565b600060208201905081810360008301526145be81614582565b9050919050565b7f5f6f776e65724d61702e736574206572726f7200000000000000000000000000600082015250565b60006145fb60138361329a565b9150614606826145c5565b602082019050919050565b6000602082019050818103600083015261462a816145ee565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061469a8261355f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036146cc576146cb614660565b5b600182019050919050565b600080fd5b600080fd5b600080fd5b60008235600160a003833603038112614702576147016146d7565b5b80830191505092915050565b6000808335600160200384360303811261472b5761472a6146d7565b5b80840192508235915067ffffffffffffffff82111561474d5761474c6146dc565b5b602083019250600182023603831315614769576147686146e1565b5b509250929050565b6000808335600160200384360303811261478e5761478d6146d7565b5b80840192508235915067ffffffffffffffff8211156147b0576147af6146dc565b5b6020830192506020820236038313156147cc576147cb6146e1565b5b509250929050565b7f546865207a6b4d6553425420646f6573206e6f74206578697374000000000000600082015250565b600061480a601a8361329a565b9150614815826147d4565b602082019050919050565b60006020820190508181036000830152614839816147fd565b9050919050565b7f5468652065787069726174696f6e206461746520697320746f6f20636c6f736560008201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b600061489c60218361329a565b91506148a782614840565b604082019050919050565b600060208201905081810360008301526148cb8161488f565b9050919050565b600081905092915050565b60006148e983856148d2565b93506148f68385846133f7565b82840190509392505050565b600061490f8284866148dd565b91508190509392505050565b60008190508160005260206000209050919050565b6000815461493d81613dc6565b61494781866148d2565b945060018216600081146149625760018114614977576149aa565b60ff19831686528115158202860193506149aa565b6149808561491b565b60005b838110156149a257815481890152600182019150602081019050614983565b838801955050505b50505092915050565b60006149bf8284614930565b915081905092915050565b7f4469736d6174636865642075736572206b657900000000000000000000000000600082015250565b6000614a0060138361329a565b9150614a0b826149ca565b602082019050919050565b60006020820190508181036000830152614a2f816149f3565b9050919050565b600081905092915050565b60008154614a4e81613dc6565b614a588186614a36565b94506001821660008114614a735760018114614a8857614abb565b60ff1983168652811515820286019350614abb565b614a9185613e89565b60005b83811015614ab357815481890152600182019150602081019050614a94565b838801955050505b50505092915050565b6000614acf8261328f565b614ad98185614a36565b9350614ae98185602086016132ab565b80840191505092915050565b6000614b018285614a41565b9150614b0d8284614ac4565b91508190509392505050565b7f6e6f206175746820666f722063616c6c65720000000000000000000000000000600082015250565b6000614b4f60128361329a565b9150614b5a82614b19565b602082019050919050565b60006020820190508181036000830152614b7e81614b42565b9050919050565b7f6d696e744461746141727261792073697a65206973206c61726765722074686160008201527f6e20350000000000000000000000000000000000000000000000000000000000602082015250565b6000614be160238361329a565b9150614bec82614b85565b604082019050919050565b60006020820190508181036000830152614c1081614bd4565b9050919050565b60008235600160a003833603038112614c3357614c326146d7565b5b80830191505092915050565b600067ffffffffffffffff821115614c5a57614c5961334b565b5b602082029050602081019050919050565b6000614c7e614c7984614c3f565b6133ab565b90508083825260208201905060208402830185811115614ca157614ca06136eb565b5b835b81811015614ce857803567ffffffffffffffff811115614cc657614cc5613341565b5b808601614cd38982613448565b85526020850194505050602081019050614ca3565b5050509392505050565b6000614cff368484614c6b565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b6000614d6c601783614a36565b9150614d7782614d36565b601782019050919050565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b6000614db8601183614a36565b9150614dc382614d82565b601182019050919050565b6000614dd982614d5f565b9150614de58285614ac4565b9150614df082614dab565b9150614dfc8284614ac4565b91508190509392505050565b6000614e138261355f565b9150614e1e8361355f565b9250828202614e2c8161355f565b91508282048414831517614e4357614e42614660565b5b5092915050565b6000614e558261355f565b9150614e608361355f565b9250828201905080821115614e7857614e77614660565b5b92915050565b6000614e898261355f565b915060008203614e9c57614e9b614660565b5b600182039050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b6000614edd60208361329a565b9150614ee882614ea7565b602082019050919050565b60006020820190508181036000830152614f0c81614ed0565b9050919050565b6000614f1e8261355f565b9150614f298361355f565b9250828203905081811115614f4157614f40614660565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfe546865206164647265737320646f6573206e6f74206861766520616e79207a6b4d65534254a264697066735822122026ac12a756dc57699fcd919448f698d3dc091f52068753f6850a69aba773f58864736f6c63430008110033