60806040523480156200001157600080fd5b506040518060400160405280601081526020017f446973746f7069616e73204d616e6761000000000000000000000000000000008152506040518060400160405280600681526020017f444d414e4741000000000000000000000000000000000000000000000000000081525081600090805190602001906200009692919062000385565b508060019080519060200190620000af92919062000385565b505050620000d2620000c6620002b760201b60201c565b620002bf60201b60201c565b6014600f81905550610dac6010819055506000600d819055506000600e81905550600060128190555060326013819055506000601781905550667c58508723800060148190555060405180602001604052806000815250601190805190602001906200014092919062000385565b5073f11b3a52e636dd04aa740cc97c5813caab0b75d0601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073568a1f8554edcea5cb5f94e463ac69a9c49c0a2d601960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200049a565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620003939062000464565b90600052602060002090601f016020900481019282620003b7576000855562000403565b82601f10620003d257805160ff191683800117855562000403565b8280016001018555821562000403579182015b8281111562000402578251825591602001919060010190620003e5565b5b50905062000412919062000416565b5090565b5b808211156200043157600081600090555060010162000417565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200047d57607f821691505b6020821081141562000494576200049362000435565b5b50919050565b6151c780620004aa6000396000f3fe60806040526004361061025c5760003560e01c806370a0823111610144578063a9898fd9116100b6578063c87b56dd1161007a578063c87b56dd14610882578063d039e487146108bf578063e985e9c5146108ea578063eb8d244414610927578063f2fde38b14610952578063f6a31c661461097b5761025c565b8063a9898fd9146107bc578063add8462e146107e7578063b88d4fde14610803578063bb9a08321461082c578063c21f95cb146108575761025c565b806395d89b411161010857806395d89b41146106cd57806396596532146106f857806397feba9d146107215780639e2b5ebf1461074c578063a035b1fe14610768578063a22cb465146107935761025c565b806370a08231146105fc578063715018a6146106395780637815f360146106505780638da5cb5b1461067957806391b7f5ed146106a45761025c565b80632933e88b116101dd57806342842e0e116101a157806342842e0e146104e95780634f6ccce71461051257806355f804b31461054f5780636352211e146105785780636c902f17146105b55780636fd6aae7146105e05761025c565b80632933e88b1461041e5780632f745c591461044957806333c41a90146104865780633c9e8433146104c35780633ccfd60b146104df5761025c565b8063095ea7b311610224578063095ea7b31461035a5780630c970b1d1461038357806318160ddd1461039f5780631f0234d8146103ca57806323b872dd146103f55761025c565b806301ffc9a71461026157806304285a0c1461029e578063049f21e3146102c957806306fdde03146102f2578063081812fc1461031d575b600080fd5b34801561026d57600080fd5b506102886004803603810190610283919061370e565b6109a6565b6040516102959190613756565b60405180910390f35b3480156102aa57600080fd5b506102b3610a20565b6040516102c0919061378a565b60405180910390f35b3480156102d557600080fd5b506102f060048036038101906102eb91906137d1565b610a26565b005b3480156102fe57600080fd5b50610307610aac565b6040516103149190613897565b60405180910390f35b34801561032957600080fd5b50610344600480360381019061033f91906137d1565b610b3e565b60405161035191906138fa565b60405180910390f35b34801561036657600080fd5b50610381600480360381019061037c9190613941565b610bc3565b005b61039d60048036038101906103989190613981565b610cdb565b005b3480156103ab57600080fd5b506103b461102a565b6040516103c1919061378a565b60405180910390f35b3480156103d657600080fd5b506103df611037565b6040516103ec919061378a565b60405180910390f35b34801561040157600080fd5b5061041c600480360381019061041791906139c1565b61103d565b005b34801561042a57600080fd5b5061043361109d565b604051610440919061378a565b60405180910390f35b34801561045557600080fd5b50610470600480360381019061046b9190613941565b6110a3565b60405161047d919061378a565b60405180910390f35b34801561049257600080fd5b506104ad60048036038101906104a891906137d1565b611148565b6040516104ba9190613756565b60405180910390f35b6104dd60048036038101906104d89190613981565b61119f565b005b6104e76114ee565b005b3480156104f557600080fd5b50610510600480360381019061050b91906139c1565b6117cf565b005b34801561051e57600080fd5b50610539600480360381019061053491906137d1565b6117ef565b604051610546919061378a565b60405180910390f35b34801561055b57600080fd5b5061057660048036038101906105719190613b49565b611860565b005b34801561058457600080fd5b5061059f600480360381019061059a91906137d1565b6118f6565b6040516105ac91906138fa565b60405180910390f35b3480156105c157600080fd5b506105ca6119a8565b6040516105d7919061378a565b60405180910390f35b6105fa60048036038101906105f591906137d1565b6119ae565b005b34801561060857600080fd5b50610623600480360381019061061e9190613b92565b611b8c565b604051610630919061378a565b60405180910390f35b34801561064557600080fd5b5061064e611c44565b005b34801561065c57600080fd5b50610677600480360381019061067291906137d1565b611ccc565b005b34801561068557600080fd5b5061068e611e43565b60405161069b91906138fa565b60405180910390f35b3480156106b057600080fd5b506106cb60048036038101906106c691906137d1565b611e6d565b005b3480156106d957600080fd5b506106e2611f3d565b6040516106ef9190613897565b60405180910390f35b34801561070457600080fd5b5061071f600480360381019061071a91906137d1565b611fcf565b005b34801561072d57600080fd5b50610736612055565b604051610743919061378a565b60405180910390f35b610766600480360381019061076191906137d1565b61205b565b005b34801561077457600080fd5b5061077d6122a0565b60405161078a919061378a565b60405180910390f35b34801561079f57600080fd5b506107ba60048036038101906107b59190613beb565b6122a6565b005b3480156107c857600080fd5b506107d16122bc565b6040516107de919061378a565b60405180910390f35b61080160048036038101906107fc91906137d1565b6122c2565b005b34801561080f57600080fd5b5061082a60048036038101906108259190613ccc565b6124f0565b005b34801561083857600080fd5b50610841612552565b60405161084e91906138fa565b60405180910390f35b34801561086357600080fd5b5061086c612578565b60405161087991906138fa565b60405180910390f35b34801561088e57600080fd5b506108a960048036038101906108a491906137d1565b61259e565b6040516108b69190613897565b60405180910390f35b3480156108cb57600080fd5b506108d4612645565b6040516108e1919061378a565b60405180910390f35b3480156108f657600080fd5b50610911600480360381019061090c9190613d4f565b61264b565b60405161091e9190613756565b60405180910390f35b34801561093357600080fd5b5061093c6126df565b604051610949919061378a565b60405180910390f35b34801561095e57600080fd5b5061097960048036038101906109749190613b92565b6126e5565b005b34801561098757600080fd5b506109906127dd565b60405161099d919061378a565b60405180910390f35b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a195750610a18826127e3565b5b9050919050565b60125481565b610a2e6128c5565b73ffffffffffffffffffffffffffffffffffffffff16610a4c611e43565b73ffffffffffffffffffffffffffffffffffffffff1614610aa2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9990613ddb565b60405180910390fd5b80600e8190555050565b606060008054610abb90613e2a565b80601f0160208091040260200160405190810160405280929190818152602001828054610ae790613e2a565b8015610b345780601f10610b0957610100808354040283529160200191610b34565b820191906000526020600020905b815481529060010190602001808311610b1757829003601f168201915b5050505050905090565b6000610b49826128cd565b610b88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7f90613ece565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610bce826118f6565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3690613f60565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c5e6128c5565b73ffffffffffffffffffffffffffffffffffffffff161480610c8d5750610c8c81610c876128c5565b61264b565b5b610ccc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc390613ff2565b60405180910390fd5b610cd68383612939565b505050565b600582610ce733611b8c565b610cf19190614041565b1115610d32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2990614109565b60405180910390fd5b6001600e5414610d77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6e9061419b565b60405180910390fd5b60105482610d8361102a565b610d8d9190614041565b1115610dce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc59061422d565b60405180910390fd5b3482601454610ddd919061424d565b1115610e1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e15906142f3565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b8152600401610e90919061378a565b602060405180830381865afa158015610ead573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ed19190614328565b73ffffffffffffffffffffffffffffffffffffffff1614610f27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1e906143a1565b60405180910390fd5b60005b82811015611025576000601354601054610f4491906143c1565b4233606485610f539190614041565b604051602001610f659392919061445e565b6040516020818303038152906040528051906020012060001c610f8891906144ca565b9050600160135482610f9a9190614041565b610fa49190614041565b90506010546017541015611011575b610fbc816128cd565b15610ff157600181610fce9190614041565b9050601054811115610fec576001601354610fe99190614041565b90505b610fb3565b610ffb33826129f2565b600160175461100a9190614041565b6017819055505b50808061101d906144fb565b915050610f2a565b505050565b6000600880549050905090565b600e5481565b61104e6110486128c5565b82612a10565b61108d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611084906145b6565b60405180910390fd5b611098838383612aee565b505050565b60105481565b60006110ae83611b8c565b82106110ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e690614648565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600060105482111561118f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611186906146da565b60405180910390fd5b611198826128cd565b9050919050565b6005826111ab33611b8c565b6111b59190614041565b11156111f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ed90614746565b60405180910390fd5b6001600e541461123b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112329061419b565b60405180910390fd5b6010548261124761102a565b6112519190614041565b1115611292576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112899061422d565b60405180910390fd5b34826014546112a1919061424d565b11156112e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d9906142f3565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b8152600401611354919061378a565b602060405180830381865afa158015611371573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113959190614328565b73ffffffffffffffffffffffffffffffffffffffff16146113eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e2906147b2565b60405180910390fd5b60005b828110156114e957600060135460105461140891906143c1565b42336064856114179190614041565b6040516020016114299392919061445e565b6040516020818303038152906040528051906020012060001c61144c91906144ca565b905060016013548261145e9190614041565b6114689190614041565b905060105460175410156114d5575b611480816128cd565b156114b5576001816114929190614041565b90506010548111156114b05760016013546114ad9190614041565b90505b611477565b6114bf33826129f2565b60016017546114ce9190614041565b6017819055505b5080806114e1906144fb565b9150506113ee565b505050565b6114f66128c5565b73ffffffffffffffffffffffffffffffffffffffff16611514611e43565b73ffffffffffffffffffffffffffffffffffffffff161461156a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156190613ddb565b60405180910390fd5b60004790506000601460648361158091906147d2565b61158a919061424d565b90506000600560648461159d91906147d2565b6115a7919061424d565b9050600060056064856115ba91906147d2565b6115c4919061424d565b9050600060286064866115d791906147d2565b6115e1919061424d565b90506000601e6064876115f491906147d2565b6115fe919061424d565b905073388ccbf8c1a37f444dcff6ede0014dfa85bedc1b73ffffffffffffffffffffffffffffffffffffffff166108fc869081150290604051600060405180830381858888f1935050505015801561165a573d6000803e3d6000fd5b507372b3639810ecfe3573b11c56ad4d52bc6a02b5b073ffffffffffffffffffffffffffffffffffffffff166108fc859081150290604051600060405180830381858888f193505050501580156116b5573d6000803e3d6000fd5b5073a2f072e33e4d8f9e9231d8359725a4c059ff596e73ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050158015611710573d6000803e3d6000fd5b507373cd135bea6b6071ae533b497193be929944857973ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f1935050505015801561176b573d6000803e3d6000fd5b5073909957dcc1b114fe262f4779e6aed4d034d96b0f73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156117c6573d6000803e3d6000fd5b50505050505050565b6117ea838383604051806020016040528060008152506124f0565b505050565b60006117f961102a565b821061183a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183190614875565b60405180910390fd5b6008828154811061184e5761184d614895565b5b90600052602060002001549050919050565b6118686128c5565b73ffffffffffffffffffffffffffffffffffffffff16611886611e43565b73ffffffffffffffffffffffffffffffffffffffff16146118dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d390613ddb565b60405180910390fd5b80601190805190602001906118f29291906135ff565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561199f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199690614936565b60405180910390fd5b80915050919050565b60155481565b600f548111156119f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ea90614109565b60405180910390fd5b6001600e5414611a38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2f9061419b565b60405180910390fd5b60105481601754611a499190614041565b1115611a8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a819061422d565b60405180910390fd5b60005b81811015611b88576000601354601054611aa791906143c1565b4233606485611ab69190614041565b604051602001611ac89392919061445e565b6040516020818303038152906040528051906020012060001c611aeb91906144ca565b9050600160135482611afd9190614041565b611b079190614041565b90506010546017541015611b74575b611b1f816128cd565b15611b5457600181611b319190614041565b9050601054811115611b4f576001601354611b4c9190614041565b90505b611b16565b611b5e33826129f2565b6001601754611b6d9190614041565b6017819055505b508080611b80906144fb565b915050611a8d565b5050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611bfd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf4906149c8565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611c4c6128c5565b73ffffffffffffffffffffffffffffffffffffffff16611c6a611e43565b73ffffffffffffffffffffffffffffffffffffffff1614611cc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb790613ddb565b60405180910390fd5b611cca6000612d4a565b565b611cd46128c5565b73ffffffffffffffffffffffffffffffffffffffff16611cf2611e43565b73ffffffffffffffffffffffffffffffffffffffff1614611d48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3f90613ddb565b60405180910390fd5b601354811115611d8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8490614a5a565b60405180910390fd5b60135481601254611d9e9190614041565b1115611ddf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd690614aec565b60405180910390fd5b60005b81811015611e3f57611e02336001601254611dfd9190614041565b6129f2565b6001601254611e119190614041565b6012819055506001601754611e269190614041565b6017819055508080611e37906144fb565b915050611de2565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611e756128c5565b73ffffffffffffffffffffffffffffffffffffffff16611e93611e43565b73ffffffffffffffffffffffffffffffffffffffff1614611ee9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee090613ddb565b60405180910390fd5b662386f26fc10000811015611f33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2a90614b7e565b60405180910390fd5b8060148190555050565b606060018054611f4c90613e2a565b80601f0160208091040260200160405190810160405280929190818152602001828054611f7890613e2a565b8015611fc55780601f10611f9a57610100808354040283529160200191611fc5565b820191906000526020600020905b815481529060010190602001808311611fa857829003601f168201915b5050505050905090565b611fd76128c5565b73ffffffffffffffffffffffffffffffffffffffff16611ff5611e43565b73ffffffffffffffffffffffffffffffffffffffff161461204b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204290613ddb565b60405180910390fd5b80600d8190555050565b60175481565b60058161206733611b8c565b6120719190614041565b11156120b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a990614746565b60405180910390fd5b6001600e54146120f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ee9061419b565b60405180910390fd5b6010548161210361102a565b61210d9190614041565b111561214e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121459061422d565b60405180910390fd5b348160145461215d919061424d565b111561219e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612195906142f3565b60405180910390fd5b60005b8181101561229c5760006013546010546121bb91906143c1565b42336064856121ca9190614041565b6040516020016121dc9392919061445e565b6040516020818303038152906040528051906020012060001c6121ff91906144ca565b90506001601354826122119190614041565b61221b9190614041565b90506010546017541015612288575b612233816128cd565b15612268576001816122459190614041565b90506010548111156122635760016013546122609190614041565b90505b61222a565b61227233826129f2565b60016017546122819190614041565b6017819055505b508080612294906144fb565b9150506121a1565b5050565b60145481565b6122b86122b16128c5565b8383612e10565b5050565b60135481565b600f54811115612307576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122fe90614109565b60405180910390fd5b6001600d541461234c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123439061419b565b60405180910390fd5b6010548160175461235d9190614041565b111561239e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123959061422d565b60405180910390fd5b34816014546123ad919061424d565b11156123ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e5906142f3565b60405180910390fd5b60005b818110156124ec57600060135460105461240b91906143c1565b423360648561241a9190614041565b60405160200161242c9392919061445e565b6040516020818303038152906040528051906020012060001c61244f91906144ca565b90506001601354826124619190614041565b61246b9190614041565b905060105460175410156124d8575b612483816128cd565b156124b8576001816124959190614041565b90506010548111156124b35760016013546124b09190614041565b90505b61247a565b6124c233826129f2565b60016017546124d19190614041565b6017819055505b5080806124e4906144fb565b9150506123f1565b5050565b6125016124fb6128c5565b83612a10565b612540576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612537906145b6565b60405180910390fd5b61254c84848484612f7d565b50505050565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606125a9826128cd565b6125e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125df90614c10565b60405180910390fd5b60006125f2612fd9565b90506000815111612612576040518060200160405280600081525061263d565b8061261c8461306b565b60405160200161262d929190614c6c565b6040516020818303038152906040525b915050919050565b600f5481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600d5481565b6126ed6128c5565b73ffffffffffffffffffffffffffffffffffffffff1661270b611e43565b73ffffffffffffffffffffffffffffffffffffffff1614612761576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161275890613ddb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156127d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127c890614d02565b60405180910390fd5b6127da81612d4a565b50565b60165481565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806128ae57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806128be57506128bd826131cc565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166129ac836118f6565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b612a0c828260405180602001604052806000815250613236565b5050565b6000612a1b826128cd565b612a5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a5190614d94565b60405180910390fd5b6000612a65836118f6565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612ad457508373ffffffffffffffffffffffffffffffffffffffff16612abc84610b3e565b73ffffffffffffffffffffffffffffffffffffffff16145b80612ae55750612ae4818561264b565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612b0e826118f6565b73ffffffffffffffffffffffffffffffffffffffff1614612b64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b5b90614e26565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612bd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bcb90614eb8565b60405180910390fd5b612bdf838383613291565b612bea600082612939565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612c3a91906143c1565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612c919190614041565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612e7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e7690614f24565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612f709190613756565b60405180910390a3505050565b612f88848484612aee565b612f9484848484613296565b612fd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fca90614fb6565b60405180910390fd5b50505050565b606060118054612fe890613e2a565b80601f016020809104026020016040519081016040528092919081815260200182805461301490613e2a565b80156130615780601f1061303657610100808354040283529160200191613061565b820191906000526020600020905b81548152906001019060200180831161304457829003601f168201915b5050505050905090565b606060008214156130b3576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506131c7565b600082905060005b600082146130e55780806130ce906144fb565b915050600a826130de91906147d2565b91506130bb565b60008167ffffffffffffffff81111561310157613100613a1e565b5b6040519080825280601f01601f1916602001820160405280156131335781602001600182028036833780820191505090505b5090505b600085146131c05760018261314c91906143c1565b9150600a8561315b91906144ca565b60306131679190614041565b60f81b81838151811061317d5761317c614895565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856131b991906147d2565b9450613137565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b613240838361341e565b61324d6000848484613296565b61328c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161328390614fb6565b60405180910390fd5b505050565b505050565b60006132b78473ffffffffffffffffffffffffffffffffffffffff166135ec565b15613411578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026132e06128c5565b8786866040518563ffffffff1660e01b8152600401613302949392919061502b565b6020604051808303816000875af192505050801561333e57506040513d601f19601f8201168201806040525081019061333b919061508c565b60015b6133c1573d806000811461336e576040519150601f19603f3d011682016040523d82523d6000602084013e613373565b606091505b506000815114156133b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133b090614fb6565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613416565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561348e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161348590615105565b60405180910390fd5b613497816128cd565b156134d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134ce90615171565b60405180910390fd5b6134e360008383613291565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546135339190614041565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b82805461360b90613e2a565b90600052602060002090601f01602090048101928261362d5760008555613674565b82601f1061364657805160ff1916838001178555613674565b82800160010185558215613674579182015b82811115613673578251825591602001919060010190613658565b5b5090506136819190613685565b5090565b5b8082111561369e576000816000905550600101613686565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6136eb816136b6565b81146136f657600080fd5b50565b600081359050613708816136e2565b92915050565b600060208284031215613724576137236136ac565b5b6000613732848285016136f9565b91505092915050565b60008115159050919050565b6137508161373b565b82525050565b600060208201905061376b6000830184613747565b92915050565b6000819050919050565b61378481613771565b82525050565b600060208201905061379f600083018461377b565b92915050565b6137ae81613771565b81146137b957600080fd5b50565b6000813590506137cb816137a5565b92915050565b6000602082840312156137e7576137e66136ac565b5b60006137f5848285016137bc565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561383857808201518184015260208101905061381d565b83811115613847576000848401525b50505050565b6000601f19601f8301169050919050565b6000613869826137fe565b6138738185613809565b935061388381856020860161381a565b61388c8161384d565b840191505092915050565b600060208201905081810360008301526138b1818461385e565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006138e4826138b9565b9050919050565b6138f4816138d9565b82525050565b600060208201905061390f60008301846138eb565b92915050565b61391e816138d9565b811461392957600080fd5b50565b60008135905061393b81613915565b92915050565b60008060408385031215613958576139576136ac565b5b60006139668582860161392c565b9250506020613977858286016137bc565b9150509250929050565b60008060408385031215613998576139976136ac565b5b60006139a6858286016137bc565b92505060206139b7858286016137bc565b9150509250929050565b6000806000606084860312156139da576139d96136ac565b5b60006139e88682870161392c565b93505060206139f98682870161392c565b9250506040613a0a868287016137bc565b9150509250925092565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613a568261384d565b810181811067ffffffffffffffff82111715613a7557613a74613a1e565b5b80604052505050565b6000613a886136a2565b9050613a948282613a4d565b919050565b600067ffffffffffffffff821115613ab457613ab3613a1e565b5b613abd8261384d565b9050602081019050919050565b82818337600083830152505050565b6000613aec613ae784613a99565b613a7e565b905082815260208101848484011115613b0857613b07613a19565b5b613b13848285613aca565b509392505050565b600082601f830112613b3057613b2f613a14565b5b8135613b40848260208601613ad9565b91505092915050565b600060208284031215613b5f57613b5e6136ac565b5b600082013567ffffffffffffffff811115613b7d57613b7c6136b1565b5b613b8984828501613b1b565b91505092915050565b600060208284031215613ba857613ba76136ac565b5b6000613bb68482850161392c565b91505092915050565b613bc88161373b565b8114613bd357600080fd5b50565b600081359050613be581613bbf565b92915050565b60008060408385031215613c0257613c016136ac565b5b6000613c108582860161392c565b9250506020613c2185828601613bd6565b9150509250929050565b600067ffffffffffffffff821115613c4657613c45613a1e565b5b613c4f8261384d565b9050602081019050919050565b6000613c6f613c6a84613c2b565b613a7e565b905082815260208101848484011115613c8b57613c8a613a19565b5b613c96848285613aca565b509392505050565b600082601f830112613cb357613cb2613a14565b5b8135613cc3848260208601613c5c565b91505092915050565b60008060008060808587031215613ce657613ce56136ac565b5b6000613cf48782880161392c565b9450506020613d058782880161392c565b9350506040613d16878288016137bc565b925050606085013567ffffffffffffffff811115613d3757613d366136b1565b5b613d4387828801613c9e565b91505092959194509250565b60008060408385031215613d6657613d656136ac565b5b6000613d748582860161392c565b9250506020613d858582860161392c565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613dc5602083613809565b9150613dd082613d8f565b602082019050919050565b60006020820190508181036000830152613df481613db8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613e4257607f821691505b60208210811415613e5657613e55613dfb565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000613eb8602c83613809565b9150613ec382613e5c565b604082019050919050565b60006020820190508181036000830152613ee781613eab565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000613f4a602183613809565b9150613f5582613eee565b604082019050919050565b60006020820190508181036000830152613f7981613f3d565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b6000613fdc603883613809565b9150613fe782613f80565b604082019050919050565b6000602082019050818103600083015261400b81613fcf565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061404c82613771565b915061405783613771565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561408c5761408b614012565b5b828201905092915050565b7f43616e206f6e6c79206d696e7420323020636f7069657320617420612074696d60008201527f6500000000000000000000000000000000000000000000000000000000000000602082015250565b60006140f3602183613809565b91506140fe82614097565b604082019050919050565b60006020820190508181036000830152614122816140e6565b9050919050565b7f53616c65206d7573742062652061637469766520746f206d696e74206120636f60008201527f7069657300000000000000000000000000000000000000000000000000000000602082015250565b6000614185602483613809565b915061419082614129565b604082019050919050565b600060208201905081810360008301526141b481614178565b9050919050565b7f507572636861736520776f756c6420657863656564206d617820737570706c7960008201527f206f6620636f7069657300000000000000000000000000000000000000000000602082015250565b6000614217602a83613809565b9150614222826141bb565b604082019050919050565b600060208201905081810360008301526142468161420a565b9050919050565b600061425882613771565b915061426383613771565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561429c5761429b614012565b5b828202905092915050565b7f546f6f206c6974746c65204554482073656e6400000000000000000000000000600082015250565b60006142dd601383613809565b91506142e8826142a7565b602082019050919050565b6000602082019050818103600083015261430c816142d0565b9050919050565b60008151905061432281613915565b92915050565b60006020828403121561433e5761433d6136ac565b5b600061434c84828501614313565b91505092915050565b7f6e6f7420616e2041434120686f6c646572000000000000000000000000000000600082015250565b600061438b601183613809565b915061439682614355565b602082019050919050565b600060208201905081810360008301526143ba8161437e565b9050919050565b60006143cc82613771565b91506143d783613771565b9250828210156143ea576143e9614012565b5b828203905092915050565b6000819050919050565b61441061440b82613771565b6143f5565b82525050565b60008160601b9050919050565b600061442e82614416565b9050919050565b600061444082614423565b9050919050565b614458614453826138d9565b614435565b82525050565b600061446a82866143ff565b60208201915061447a8285614447565b60148201915061448a82846143ff565b602082019150819050949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006144d582613771565b91506144e083613771565b9250826144f0576144ef61449b565b5b828206905092915050565b600061450682613771565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561453957614538614012565b5b600182019050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b60006145a0603183613809565b91506145ab82614544565b604082019050919050565b600060208201905081810360008301526145cf81614593565b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b6000614632602b83613809565b915061463d826145d6565b604082019050919050565b6000602082019050818103600083015261466181614625565b9050919050565b7f746f6b656e4964206f75747369646520636f6c6c656374696f6e20626f756e6460008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006146c4602183613809565b91506146cf82614668565b604082019050919050565b600060208201905081810360008301526146f3816146b7565b9050919050565b7f43616e206f6e6c79206d696e74203520636f7069657320617420612074696d65600082015250565b6000614730602083613809565b915061473b826146fa565b602082019050919050565b6000602082019050818103600083015261475f81614723565b9050919050565b7f6e6f7420616e20464c5320686f6c646572000000000000000000000000000000600082015250565b600061479c601183613809565b91506147a782614766565b602082019050919050565b600060208201905081810360008301526147cb8161478f565b9050919050565b60006147dd82613771565b91506147e883613771565b9250826147f8576147f761449b565b5b828204905092915050565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b600061485f602c83613809565b915061486a82614803565b604082019050919050565b6000602082019050818103600083015261488e81614852565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000614920602983613809565b915061492b826148c4565b604082019050919050565b6000602082019050818103600083015261494f81614913565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b60006149b2602a83613809565b91506149bd82614956565b604082019050919050565b600060208201905081810360008301526149e1816149a5565b9050919050565b7f43616e206f6e6c79206d696e7420353020636f7069657320617420612074696d60008201527f6500000000000000000000000000000000000000000000000000000000000000602082015250565b6000614a44602183613809565b9150614a4f826149e8565b604082019050919050565b60006020820190508181036000830152614a7381614a37565b9050919050565b7f507572636861736520776f756c6420657863656564206d617820737570706c7960008201527f206f6620526573657276656420636f7069657300000000000000000000000000602082015250565b6000614ad6603383613809565b9150614ae182614a7a565b604082019050919050565b60006020820190508181036000830152614b0581614ac9565b9050919050565b7f5468652070726963652063616e6e6f74206265206c6f776572207468656e203060008201527f2e30312065746800000000000000000000000000000000000000000000000000602082015250565b6000614b68602783613809565b9150614b7382614b0c565b604082019050919050565b60006020820190508181036000830152614b9781614b5b565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000614bfa602f83613809565b9150614c0582614b9e565b604082019050919050565b60006020820190508181036000830152614c2981614bed565b9050919050565b600081905092915050565b6000614c46826137fe565b614c508185614c30565b9350614c6081856020860161381a565b80840191505092915050565b6000614c788285614c3b565b9150614c848284614c3b565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614cec602683613809565b9150614cf782614c90565b604082019050919050565b60006020820190508181036000830152614d1b81614cdf565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000614d7e602c83613809565b9150614d8982614d22565b604082019050919050565b60006020820190508181036000830152614dad81614d71565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b6000614e10602983613809565b9150614e1b82614db4565b604082019050919050565b60006020820190508181036000830152614e3f81614e03565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614ea2602483613809565b9150614ead82614e46565b604082019050919050565b60006020820190508181036000830152614ed181614e95565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000614f0e601983613809565b9150614f1982614ed8565b602082019050919050565b60006020820190508181036000830152614f3d81614f01565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000614fa0603283613809565b9150614fab82614f44565b604082019050919050565b60006020820190508181036000830152614fcf81614f93565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000614ffd82614fd6565b6150078185614fe1565b935061501781856020860161381a565b6150208161384d565b840191505092915050565b600060808201905061504060008301876138eb565b61504d60208301866138eb565b61505a604083018561377b565b818103606083015261506c8184614ff2565b905095945050505050565b600081519050615086816136e2565b92915050565b6000602082840312156150a2576150a16136ac565b5b60006150b084828501615077565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b60006150ef602083613809565b91506150fa826150b9565b602082019050919050565b6000602082019050818103600083015261511e816150e2565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b600061515b601c83613809565b915061516682615125565b602082019050919050565b6000602082019050818103600083015261518a8161514e565b905091905056fea2646970667358221220262e9720696d49f7d8f6a7ae8010bd7219f694369b204095b3f880e30182a73664736f6c634300080b0033