608060405261314e6004556004546005556107086006553480156200002357600080fd5b5060405162004c7638038062004c76833981810160405281019062000049919062000279565b604051806020016040528060008152506200006a816200012c60201b60201c565b506200008b6200007f6200014160201b60201c565b6200014960201b60201c565b6001600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505062000621565b80600290816200013d91906200053a565b5050565b600033905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620002418262000214565b9050919050565b620002538162000234565b81146200025f57600080fd5b50565b600081519050620002738162000248565b92915050565b600080604083850312156200029357620002926200020f565b5b6000620002a38582860162000262565b9250506020620002b68582860162000262565b9150509250929050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200034257607f821691505b602082108103620003585762000357620002fa565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620003c27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000383565b620003ce868362000383565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b60006200041b620004156200040f84620003e6565b620003f0565b620003e6565b9050919050565b6000819050919050565b6200043783620003fa565b6200044f620004468262000422565b84845462000390565b825550505050565b600090565b6200046662000457565b620004738184846200042c565b505050565b5b818110156200049b576200048f6000826200045c565b60018101905062000479565b5050565b601f821115620004ea57620004b4816200035e565b620004bf8462000373565b81016020851015620004cf578190505b620004e7620004de8562000373565b83018262000478565b50505b505050565b600082821c905092915050565b60006200050f60001984600802620004ef565b1980831691505092915050565b60006200052a8383620004fc565b9150826002028217905092915050565b6200054582620002c0565b67ffffffffffffffff811115620005615762000560620002cb565b5b6200056d825462000329565b6200057a8282856200049f565b600060209050601f831160018114620005b257600084156200059d578287015190505b620005a985826200051c565b86555062000619565b601f198416620005c2866200035e565b60005b82811015620005ec57848901518255600182019150602085019450602081019050620005c5565b868310156200060c578489015162000608601f891682620004fc565b8355505b6001600288020188555050505b505050505050565b61464580620006316000396000f3fe608060405234801561001057600080fd5b50600436106101365760003560e01c806386e1767b116100b8578063c189754c1161007c578063c189754c14610333578063c2bca1b214610363578063e985e9c514610381578063f242432a146103b1578063f2fde38b146103cd578063f5298aca146103e957610136565b806386e1767b146102a55780638da5cb5b146102c1578063a22cb465146102df578063acec123a146102fb578063bd5643431461031757610136565b80633de1f93c116100ff5780633de1f93c146102035780634e1273f41461021f5780636a6278421461024f5780636b20c4541461027f578063715018a61461029b57610136565b8062fdd58e1461013b57806301ffc9a71461016b5780630e89341c1461019b578063111933c5146101cb5780632eb2c2d6146101e7575b600080fd5b61015560048036038101906101509190612a08565b610405565b6040516101629190612a57565b60405180910390f35b61018560048036038101906101809190612aca565b6104cd565b6040516101929190612b12565b60405180910390f35b6101b560048036038101906101b09190612b2d565b6105af565b6040516101c29190612bea565b60405180910390f35b6101e560048036038101906101e09190612c0c565b6105e0565b005b61020160048036038101906101fc9190612e36565b6106a0565b005b61021d60048036038101906102189190612f05565b610741565b005b61023960048036038101906102349190613008565b61088e565b604051610246919061313e565b60405180910390f35b61026960048036038101906102649190612c0c565b6109a7565b6040516102769190612a57565b60405180910390f35b61029960048036038101906102949190613160565b610b67565b005b6102a3610c04565b005b6102bf60048036038101906102ba9190613246565b610c8c565b005b6102c9610ede565b6040516102d691906132a2565b60405180910390f35b6102f960048036038101906102f491906132e9565b610f08565b005b61031560048036038101906103109190612c0c565b610f1e565b005b610331600480360381019061032c919061337f565b611041565b005b61034d60048036038101906103489190612c0c565b611225565b60405161035a9190612b12565b60405180910390f35b61036b611245565b6040516103789190612a57565b60405180910390f35b61039b60048036038101906103969190613400565b61124b565b6040516103a89190612b12565b60405180910390f35b6103cb60048036038101906103c69190613440565b6112df565b005b6103e760048036038101906103e29190612c0c565b611380565b005b61040360048036038101906103fe91906134d7565b611477565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610475576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161046c9061359c565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061059857507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806105a857506105a782611514565b5b9050919050565b60606105ba8261157e565b6040516020016105ca9190613644565b6040516020818303038152906040529050919050565b6105e86116de565b73ffffffffffffffffffffffffffffffffffffffff16610606610ede565b73ffffffffffffffffffffffffffffffffffffffff161461065c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610653906136b2565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6106a86116de565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806106ee57506106ed856106e86116de565b61124b565b5b61072d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161072490613744565b60405180910390fd5b61073a85858585856116e6565b5050505050565b60011515600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515146107d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107cb906137d6565b60405180910390fd5b600454821080156108035750600a600083815260200190815260200160002060009054906101000a900460ff16155b610842576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083990613868565b60405180910390fd5b6001600a600084815260200190815260200160002060006101000a81548160ff02191690831515021790555061088a81836001604051806020016040528060008152506119f9565b5050565b606081518351146108d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108cb906138fa565b60405180910390fd5b6000835167ffffffffffffffff8111156108f1576108f0612c3e565b5b60405190808252806020026020018201604052801561091f5781602001602082028036833780820191505090505b50905060005b845181101561099c5761096c8582815181106109445761094361391a565b5b602002602001015185838151811061095f5761095e61391a565b5b6020026020010151610405565b82828151811061097f5761097e61391a565b5b6020026020010181815250508061099590613978565b9050610925565b508091505092915050565b600060011515600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514610a3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3390613a0c565b60405180910390fd5b600a6000600554815260200190815260200160002060009054906101000a900460ff1615610a9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9690613a78565b60405180910390fd5b6001600a6000600554815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b6000600554815260200190815260200160002081905550610b06826005546001604051806020016040528060008152506119f9565b7fda37435279d9eee356742448a8382f3b030e47ad44918c2c511afe81b96541fa600554604051610b379190612a57565b60405180910390a16000600554905060056000815480929190610b5990613978565b919050555080915050919050565b610b6f6116de565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480610bb55750610bb483610baf6116de565b61124b565b5b610bf4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610beb90613b0a565b60405180910390fd5b610bff838383611b8e565b505050565b610c0c6116de565b73ffffffffffffffffffffffffffffffffffffffff16610c2a610ede565b73ffffffffffffffffffffffffffffffffffffffff1614610c80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c77906136b2565b60405180910390fd5b610c8a6000611e3e565b565b60005b82829050811015610ed957600a6000848484818110610cb157610cb061391a565b5b90506020020135815260200190815260200160002060009054906101000a900460ff1615610d14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0b90613b76565b60405180910390fd5b600454838383818110610d2a57610d2961391a565b5b9050602002013510610d71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6890613be2565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f5298aca33858585818110610dc357610dc261391a565b5b9050602002013560016040518463ffffffff1660e01b8152600401610dea93929190613c47565b600060405180830381600087803b158015610e0457600080fd5b505af1158015610e18573d6000803e3d6000fd5b505050506001600a6000858585818110610e3557610e3461391a565b5b90506020020135815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b6000858585818110610e7a57610e7961391a565b5b90506020020135815260200190815260200160002081905550610ec833848484818110610eaa57610ea961391a565b5b905060200201356001604051806020016040528060008152506119f9565b80610ed290613978565b9050610c8f565b505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610f1a610f136116de565b8383611f04565b5050565b610f266116de565b73ffffffffffffffffffffffffffffffffffffffff16610f44610ede565b73ffffffffffffffffffffffffffffffffffffffff1614610f9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f91906136b2565b60405180910390fd5b600960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6110496116de565b73ffffffffffffffffffffffffffffffffffffffff16611067610ede565b73ffffffffffffffffffffffffffffffffffffffff16146110bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b4906136b2565b60405180910390fd5b60005b8484905081101561121e576000600b60008787858181106110e4576110e361391a565b5b905060200201358152602001908152602001600020541461113a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113190613cca565b60405180910390fd5b6001600a60008787858181106111535761115261391a565b5b90506020020135815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b60008787858181106111985761119761391a565b5b9050602002013581526020019081526020016000208190555061120d8383838181106111c7576111c661391a565b5b90506020020160208101906111dc9190612c0c565b8686848181106111ef576111ee61391a565b5b905060200201356001604051806020016040528060008152506119f9565b8061121790613978565b90506110c0565b5050505050565b60096020528060005260406000206000915054906101000a900460ff1681565b60065481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6112e76116de565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061132d575061132c856113276116de565b61124b565b5b61136c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136390613b0a565b60405180910390fd5b6113798585858585612070565b5050505050565b6113886116de565b73ffffffffffffffffffffffffffffffffffffffff166113a6610ede565b73ffffffffffffffffffffffffffffffffffffffff16146113fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f3906136b2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361146b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146290613d5c565b60405180910390fd5b61147481611e3e565b50565b61147f6116de565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614806114c557506114c4836114bf6116de565b61124b565b5b611504576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fb90613b0a565b60405180910390fd5b61150f8383836122f1565b505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6060600082036115c5576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506116d9565b600082905060005b600082146115f75780806115e090613978565b915050600a826115f09190613dab565b91506115cd565b60008167ffffffffffffffff81111561161357611612612c3e565b5b6040519080825280601f01601f1916602001820160405280156116455781602001600182028036833780820191505090505b5090505b600085146116d25760018261165e9190613ddc565b9150600a8561166d9190613e10565b60306116799190613e41565b60f81b81838151811061168f5761168e61391a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856116cb9190613dab565b9450611649565b8093505050505b919050565b600033905090565b815183511461172a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172190613ee7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611799576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179090613f79565b60405180910390fd5b60006117a36116de565b90506117b381878787878761250d565b60005b84518110156119645760008582815181106117d4576117d361391a565b5b6020026020010151905060008583815181106117f3576117f261391a565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611894576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188b9061400b565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546119499190613e41565b925050819055505050508061195d90613978565b90506117b6565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516119db92919061402b565b60405180910390a46119f1818787878787612515565b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611a68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5f906140d4565b60405180910390fd5b6000611a726116de565b9050611a9381600087611a84886126ec565b611a8d886126ec565b8761250d565b8260008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611af29190613e41565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051611b709291906140f4565b60405180910390a4611b8781600087878787612766565b5050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611bfd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf49061418f565b60405180910390fd5b8051825114611c41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3890613ee7565b60405180910390fd5b6000611c4b6116de565b9050611c6b8185600086866040518060200160405280600081525061250d565b60005b8351811015611db8576000848281518110611c8c57611c8b61391a565b5b602002602001015190506000848381518110611cab57611caa61391a565b5b60200260200101519050600080600084815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611d4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4390614221565b60405180910390fd5b81810360008085815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050508080611db090613978565b915050611c6e565b50600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051611e3092919061402b565b60405180910390a450505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611f72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f69906142b3565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516120639190612b12565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036120df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d690613f79565b60405180910390fd5b60006120e96116de565b90506121098187876120fa886126ec565b612103886126ec565b8761250d565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050838110156121a0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121979061400b565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122559190613e41565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6288886040516122d29291906140f4565b60405180910390a46122e8828888888888612766565b50505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612360576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123579061418f565b60405180910390fd5b600061236a6116de565b905061239a8185600061237c876126ec565b612385876126ec565b6040518060200160405280600081525061250d565b600080600085815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015612431576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242890614221565b60405180910390fd5b82810360008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6287876040516124fe9291906140f4565b60405180910390a45050505050565b505050505050565b6125348473ffffffffffffffffffffffffffffffffffffffff1661293d565b156126e4578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b815260040161257a959493929190614328565b6020604051808303816000875af19250505080156125b657506040513d601f19601f820116820180604052508101906125b391906143a5565b60015b61265b576125c26143df565b806308c379a00361261e57506125d6614401565b806125e15750612620565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126159190612bea565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265290614503565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146126e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126d990614595565b60405180910390fd5b505b505050505050565b60606000600167ffffffffffffffff81111561270b5761270a612c3e565b5b6040519080825280602002602001820160405280156127395781602001602082028036833780820191505090505b50905082816000815181106127515761275061391a565b5b60200260200101818152505080915050919050565b6127858473ffffffffffffffffffffffffffffffffffffffff1661293d565b15612935578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b81526004016127cb9594939291906145b5565b6020604051808303816000875af192505050801561280757506040513d601f19601f8201168201806040525081019061280491906143a5565b60015b6128ac576128136143df565b806308c379a00361286f5750612827614401565b806128325750612871565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128669190612bea565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128a390614503565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612933576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161292a90614595565b60405180910390fd5b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061299f82612974565b9050919050565b6129af81612994565b81146129ba57600080fd5b50565b6000813590506129cc816129a6565b92915050565b6000819050919050565b6129e5816129d2565b81146129f057600080fd5b50565b600081359050612a02816129dc565b92915050565b60008060408385031215612a1f57612a1e61296a565b5b6000612a2d858286016129bd565b9250506020612a3e858286016129f3565b9150509250929050565b612a51816129d2565b82525050565b6000602082019050612a6c6000830184612a48565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612aa781612a72565b8114612ab257600080fd5b50565b600081359050612ac481612a9e565b92915050565b600060208284031215612ae057612adf61296a565b5b6000612aee84828501612ab5565b91505092915050565b60008115159050919050565b612b0c81612af7565b82525050565b6000602082019050612b276000830184612b03565b92915050565b600060208284031215612b4357612b4261296a565b5b6000612b51848285016129f3565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612b94578082015181840152602081019050612b79565b60008484015250505050565b6000601f19601f8301169050919050565b6000612bbc82612b5a565b612bc68185612b65565b9350612bd6818560208601612b76565b612bdf81612ba0565b840191505092915050565b60006020820190508181036000830152612c048184612bb1565b905092915050565b600060208284031215612c2257612c2161296a565b5b6000612c30848285016129bd565b91505092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612c7682612ba0565b810181811067ffffffffffffffff82111715612c9557612c94612c3e565b5b80604052505050565b6000612ca8612960565b9050612cb48282612c6d565b919050565b600067ffffffffffffffff821115612cd457612cd3612c3e565b5b602082029050602081019050919050565b600080fd5b6000612cfd612cf884612cb9565b612c9e565b90508083825260208201905060208402830185811115612d2057612d1f612ce5565b5b835b81811015612d495780612d3588826129f3565b845260208401935050602081019050612d22565b5050509392505050565b600082601f830112612d6857612d67612c39565b5b8135612d78848260208601612cea565b91505092915050565b600080fd5b600067ffffffffffffffff821115612da157612da0612c3e565b5b612daa82612ba0565b9050602081019050919050565b82818337600083830152505050565b6000612dd9612dd484612d86565b612c9e565b905082815260208101848484011115612df557612df4612d81565b5b612e00848285612db7565b509392505050565b600082601f830112612e1d57612e1c612c39565b5b8135612e2d848260208601612dc6565b91505092915050565b600080600080600060a08688031215612e5257612e5161296a565b5b6000612e60888289016129bd565b9550506020612e71888289016129bd565b945050604086013567ffffffffffffffff811115612e9257612e9161296f565b5b612e9e88828901612d53565b935050606086013567ffffffffffffffff811115612ebf57612ebe61296f565b5b612ecb88828901612d53565b925050608086013567ffffffffffffffff811115612eec57612eeb61296f565b5b612ef888828901612e08565b9150509295509295909350565b60008060408385031215612f1c57612f1b61296a565b5b6000612f2a858286016129f3565b9250506020612f3b858286016129bd565b9150509250929050565b600067ffffffffffffffff821115612f6057612f5f612c3e565b5b602082029050602081019050919050565b6000612f84612f7f84612f45565b612c9e565b90508083825260208201905060208402830185811115612fa757612fa6612ce5565b5b835b81811015612fd05780612fbc88826129bd565b845260208401935050602081019050612fa9565b5050509392505050565b600082601f830112612fef57612fee612c39565b5b8135612fff848260208601612f71565b91505092915050565b6000806040838503121561301f5761301e61296a565b5b600083013567ffffffffffffffff81111561303d5761303c61296f565b5b61304985828601612fda565b925050602083013567ffffffffffffffff81111561306a5761306961296f565b5b61307685828601612d53565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6130b5816129d2565b82525050565b60006130c783836130ac565b60208301905092915050565b6000602082019050919050565b60006130eb82613080565b6130f5818561308b565b93506131008361309c565b8060005b8381101561313157815161311888826130bb565b9750613123836130d3565b925050600181019050613104565b5085935050505092915050565b6000602082019050818103600083015261315881846130e0565b905092915050565b6000806000606084860312156131795761317861296a565b5b6000613187868287016129bd565b935050602084013567ffffffffffffffff8111156131a8576131a761296f565b5b6131b486828701612d53565b925050604084013567ffffffffffffffff8111156131d5576131d461296f565b5b6131e186828701612d53565b9150509250925092565b600080fd5b60008083601f84011261320657613205612c39565b5b8235905067ffffffffffffffff811115613223576132226131eb565b5b60208301915083602082028301111561323f5761323e612ce5565b5b9250929050565b6000806020838503121561325d5761325c61296a565b5b600083013567ffffffffffffffff81111561327b5761327a61296f565b5b613287858286016131f0565b92509250509250929050565b61329c81612994565b82525050565b60006020820190506132b76000830184613293565b92915050565b6132c681612af7565b81146132d157600080fd5b50565b6000813590506132e3816132bd565b92915050565b60008060408385031215613300576132ff61296a565b5b600061330e858286016129bd565b925050602061331f858286016132d4565b9150509250929050565b60008083601f84011261333f5761333e612c39565b5b8235905067ffffffffffffffff81111561335c5761335b6131eb565b5b60208301915083602082028301111561337857613377612ce5565b5b9250929050565b600080600080604085870312156133995761339861296a565b5b600085013567ffffffffffffffff8111156133b7576133b661296f565b5b6133c3878288016131f0565b9450945050602085013567ffffffffffffffff8111156133e6576133e561296f565b5b6133f287828801613329565b925092505092959194509250565b600080604083850312156134175761341661296a565b5b6000613425858286016129bd565b9250506020613436858286016129bd565b9150509250929050565b600080600080600060a0868803121561345c5761345b61296a565b5b600061346a888289016129bd565b955050602061347b888289016129bd565b945050604061348c888289016129f3565b935050606061349d888289016129f3565b925050608086013567ffffffffffffffff8111156134be576134bd61296f565b5b6134ca88828901612e08565b9150509295509295909350565b6000806000606084860312156134f0576134ef61296a565b5b60006134fe868287016129bd565b935050602061350f868287016129f3565b9250506040613520868287016129f3565b9150509250925092565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b6000613586602b83612b65565b91506135918261352a565b604082019050919050565b600060208201905081810360008301526135b581613579565b9050919050565b600081905092915050565b7f68747470733a2f2f6d6e6c74686173736574732e7274666b742e636f6d2f0000600082015250565b60006135fd601e836135bc565b9150613608826135c7565b601e82019050919050565b600061361e82612b5a565b61362881856135bc565b9350613638818560208601612b76565b80840191505092915050565b600061364f826135f0565b915061365b8284613613565b915081905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061369c602083612b65565b91506136a782613666565b602082019050919050565b600060208201905081810360008301526136cb8161368f565b9050919050565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b600061372e603283612b65565b9150613739826136d2565b604082019050919050565b6000602082019050818103600083015261375d81613721565b9050919050565b7f4e6f7420617574686f72697a6564202d207669616c20736b696e556e6571756960008201527f7070656400000000000000000000000000000000000000000000000000000000602082015250565b60006137c0602483612b65565b91506137cb82613764565b604082019050919050565b600060208201905081810360008301526137ef816137b3565b9050919050565b7f4f6e6c79206c6567616379207669616c732063616e20626520756e657175697060008201527f7065640000000000000000000000000000000000000000000000000000000000602082015250565b6000613852602383612b65565b915061385d826137f6565b604082019050919050565b6000602082019050818103600083015261388181613845565b9050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b60006138e4602983612b65565b91506138ef82613888565b604082019050919050565b60006020820190508181036000830152613913816138d7565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613983826129d2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036139b5576139b4613949565b5b600182019050919050565b7f4e6f7420617574686f72697a6564202d207669616c206d696e74000000000000600082015250565b60006139f6601a83612b65565b9150613a01826139c0565b602082019050919050565b60006020820190508181036000830152613a25816139e9565b9050919050565b7f5669616c20616c7265616479206d696e74656400000000000000000000000000600082015250565b6000613a62601383612b65565b9150613a6d82613a2c565b602082019050919050565b60006020820190508181036000830152613a9181613a55565b9050919050565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b6000613af4602983612b65565b9150613aff82613a98565b604082019050919050565b60006020820190508181036000830152613b2381613ae7565b9050919050565b7f5570677261646564207669616c20616c72656164792065786973747300000000600082015250565b6000613b60601c83612b65565b9150613b6b82613b2a565b602082019050919050565b60006020820190508181036000830152613b8f81613b53565b9050919050565b7f43616e206f6e6c792075706772616465206c6567616379207669616c73000000600082015250565b6000613bcc601d83612b65565b9150613bd782613b96565b602082019050919050565b60006020820190508181036000830152613bfb81613bbf565b9050919050565b6000819050919050565b6000819050919050565b6000613c31613c2c613c2784613c02565b613c0c565b6129d2565b9050919050565b613c4181613c16565b82525050565b6000606082019050613c5c6000830186613293565b613c696020830185612a48565b613c766040830184613c38565b949350505050565b7f5669616c20616c72656164792065786973740000000000000000000000000000600082015250565b6000613cb4601283612b65565b9150613cbf82613c7e565b602082019050919050565b60006020820190508181036000830152613ce381613ca7565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613d46602683612b65565b9150613d5182613cea565b604082019050919050565b60006020820190508181036000830152613d7581613d39565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613db6826129d2565b9150613dc1836129d2565b925082613dd157613dd0613d7c565b5b828204905092915050565b6000613de7826129d2565b9150613df2836129d2565b9250828203905081811115613e0a57613e09613949565b5b92915050565b6000613e1b826129d2565b9150613e26836129d2565b925082613e3657613e35613d7c565b5b828206905092915050565b6000613e4c826129d2565b9150613e57836129d2565b9250828201905080821115613e6f57613e6e613949565b5b92915050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b6000613ed1602883612b65565b9150613edc82613e75565b604082019050919050565b60006020820190508181036000830152613f0081613ec4565b9050919050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613f63602583612b65565b9150613f6e82613f07565b604082019050919050565b60006020820190508181036000830152613f9281613f56565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b6000613ff5602a83612b65565b915061400082613f99565b604082019050919050565b6000602082019050818103600083015261402481613fe8565b9050919050565b6000604082019050818103600083015261404581856130e0565b9050818103602083015261405981846130e0565b90509392505050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006140be602183612b65565b91506140c982614062565b604082019050919050565b600060208201905081810360008301526140ed816140b1565b9050919050565b60006040820190506141096000830185612a48565b6141166020830184612a48565b9392505050565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614179602383612b65565b91506141848261411d565b604082019050919050565b600060208201905081810360008301526141a88161416c565b9050919050565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b600061420b602483612b65565b9150614216826141af565b604082019050919050565b6000602082019050818103600083015261423a816141fe565b9050919050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b600061429d602983612b65565b91506142a882614241565b604082019050919050565b600060208201905081810360008301526142cc81614290565b9050919050565b600081519050919050565b600082825260208201905092915050565b60006142fa826142d3565b61430481856142de565b9350614314818560208601612b76565b61431d81612ba0565b840191505092915050565b600060a08201905061433d6000830188613293565b61434a6020830187613293565b818103604083015261435c81866130e0565b9050818103606083015261437081856130e0565b9050818103608083015261438481846142ef565b90509695505050505050565b60008151905061439f81612a9e565b92915050565b6000602082840312156143bb576143ba61296a565b5b60006143c984828501614390565b91505092915050565b60008160e01c9050919050565b600060033d11156143fe5760046000803e6143fb6000516143d2565b90505b90565b600060443d1061448e57614413612960565b60043d036004823e80513d602482011167ffffffffffffffff8211171561443b57505061448e565b808201805167ffffffffffffffff811115614459575050505061448e565b80602083010160043d03850181111561447657505050505061448e565b61448582602001850186612c6d565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b60006144ed603483612b65565b91506144f882614491565b604082019050919050565b6000602082019050818103600083015261451c816144e0565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b600061457f602883612b65565b915061458a82614523565b604082019050919050565b600060208201905081810360008301526145ae81614572565b9050919050565b600060a0820190506145ca6000830188613293565b6145d76020830187613293565b6145e46040830186612a48565b6145f16060830185612a48565b818103608083015261460381846142ef565b9050969550505050505056fea2646970667358221220eef6896bde33cf7e7496b815520bb62c8cc18a0ffc4be195842fe5806388c07d64736f6c63430008100033000000000000000000000000f661d58cfe893993b11d53d11148c4650590c6920000000000000000000000009a06ef3a841316a9e2c1c93b9c21a7342abe484f