60806040523480156200001157600080fd5b506040516200498c3803806200498c8339818101604052810190620000379190620001fd565b6040518060400160405280600a81526020017f546f6b656e73204e4654000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f544b4e53000000000000000000000000000000000000000000000000000000008152508160009081620000b49190620004a9565b508060019081620000c69190620004a9565b50505033600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000162600e6200016960201b62001e161760201c565b5062000590565b6001816000016000828254019250508190555050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620001b18262000184565b9050919050565b6000620001c582620001a4565b9050919050565b620001d781620001b8565b8114620001e357600080fd5b50565b600081519050620001f781620001cc565b92915050565b6000602082840312156200021657620002156200017f565b5b60006200022684828501620001e6565b91505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620002b157607f821691505b602082108103620002c757620002c662000269565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620003317fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620002f2565b6200033d8683620002f2565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b60006200038a620003846200037e8462000355565b6200035f565b62000355565b9050919050565b6000819050919050565b620003a68362000369565b620003be620003b58262000391565b848454620002ff565b825550505050565b600090565b620003d5620003c6565b620003e28184846200039b565b505050565b5b818110156200040a57620003fe600082620003cb565b600181019050620003e8565b5050565b601f82111562000459576200042381620002cd565b6200042e84620002e2565b810160208510156200043e578190505b620004566200044d85620002e2565b830182620003e7565b50505b505050565b600082821c905092915050565b60006200047e600019846008026200045e565b1980831691505092915050565b60006200049983836200046b565b9150826002028217905092915050565b620004b4826200022f565b67ffffffffffffffff811115620004d057620004cf6200023a565b5b620004dc825462000298565b620004e98282856200040e565b600060209050601f8311600181146200052157600084156200050c578287015190505b6200051885826200048b565b86555062000588565b601f1984166200053186620002cd565b60005b828110156200055b5784890151825560018201915060208501945060208101905062000534565b868310156200057b578489015162000577601f8916826200046b565b8355505b6001600288020188555050505b505050505050565b6143ec80620005a06000396000f3fe608060405234801561001057600080fd5b50600436106101a95760003560e01c806370a08231116100f9578063b13a255d11610097578063c457fb3711610071578063c457fb37146104ca578063c87b56dd146104fa578063dbb784e01461052a578063e985e9c514610546576101a9565b8063b13a255d14610462578063b88d4fde1461047e578063ba7aef431461049a576101a9565b806393ac3638116100d357806393ac3638146103ee57806395d89b411461040a578063a22cb46514610428578063aa6ca80814610444576101a9565b806370a0823114610384578063897925f5146103b45780638da5cb5b146103d0576101a9565b806323b872dd1161016657806342842e0e1161014057806342842e0e146102fc578063543fcf03146103185780635476ea9e146103365780636352211e14610354576101a9565b806323b872dd146102945780632d296bf1146102b05780633bb3a24d146102cc576101a9565b806301ffc9a7146101ae57806306fdde03146101de57806308083721146101fc578063081812fc14610218578063095ea7b314610248578063127f149814610264575b600080fd5b6101c860048036038101906101c39190612a47565b610576565b6040516101d59190612a8f565b60405180910390f35b6101e6610658565b6040516101f39190612b3a565b60405180910390f35b61021660048036038101906102119190612bf0565b6106ea565b005b610232600480360381019061022d9190612c43565b610aa5565b60405161023f9190612c7f565b60405180910390f35b610262600480360381019061025d9190612c9a565b610b2a565b005b61027e60048036038101906102799190612cda565b610c41565b60405161028b9190612dc5565b60405180910390f35b6102ae60048036038101906102a99190612bf0565b610cd8565b005b6102ca60048036038101906102c59190612c43565b610d38565b005b6102e660048036038101906102e19190612c43565b61110d565b6040516102f39190612b3a565b60405180910390f35b61031660048036038101906103119190612bf0565b61111f565b005b61032061113f565b60405161032d9190612e46565b60405180910390f35b61033e611165565b60405161034b9190612c7f565b60405180910390f35b61036e60048036038101906103699190612c43565b61118b565b60405161037b9190612c7f565b60405180910390f35b61039e60048036038101906103999190612cda565b61123c565b6040516103ab9190612e70565b60405180910390f35b6103ce60048036038101906103c99190612e8b565b6112f3565b005b6103d8611430565b6040516103e59190612c7f565b60405180910390f35b61040860048036038101906104039190612cda565b611456565b005b61041261152a565b60405161041f9190612b3a565b60405180910390f35b610442600480360381019061043d9190612ef7565b6115bc565b005b61044c61173c565b6040516104599190612dc5565b60405180910390f35b61047c60048036038101906104779190612c43565b611794565b005b6104986004803603810190610493919061306c565b6118e4565b005b6104b460048036038101906104af9190613190565b611946565b6040516104c19190612e70565b60405180910390f35b6104e460048036038101906104df9190612c43565b611ac4565b6040516104f19190612e70565b60405180910390f35b610514600480360381019061050f9190612c43565b611ae1565b6040516105219190612b3a565b60405180910390f35b610544600480360381019061053f9190612c43565b611c32565b005b610560600480360381019061055b91906131ff565b611d82565b60405161056d9190612a8f565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061064157507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610651575061065082611e2c565b5b9050919050565b6060600080546106679061326e565b80601f01602080910402602001604051908101604052809291908181526020018280546106939061326e565b80156106e05780601f106106b5576101008083540402835291602001916106e0565b820191906000526020600020905b8154815290600101906020018083116106c357829003601f168201915b5050505050905090565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461077a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610771906132eb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361080b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161080290613357565b60405180910390fd5b60006108178483611e96565b9050600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050811061089d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610894906133c3565b60405180910390fd5b60008190505b6001600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490506108f29190613412565b8110156109d357600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001826109459190613446565b815481106109565761095561347a565b5b9060005260206000200154600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002082815481106109b2576109b161347a565b5b906000526020600020018190555080806109cb906134a9565b9150506108a3565b50600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480610a2357610a226134f1565b5b60019003818190600052602060002001600090559055600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002082908060018154018082558091505060019003906000526020600020016000909190919091505550505050565b6000610ab082611f14565b610aef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae690613592565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b358261118b565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610ba5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9c90613624565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610bc4611f80565b73ffffffffffffffffffffffffffffffffffffffff161480610bf35750610bf281610bed611f80565b611d82565b5b610c32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c29906136b6565b60405180910390fd5b610c3c8383611f88565b505050565b6060600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020018280548015610ccc57602002820191906000526020600020905b815481526020019060010190808311610cb8575b50505050509050919050565b610ce9610ce3611f80565b82612041565b610d28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1f90613748565b60405180910390fd5b610d3383838361211f565b505050565b60011515600c600083815260200190815260200160002060009054906101000a900460ff16151503610d9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d96906137da565b60405180910390fd5b6000610daa8261118b565b9050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd33610df48561118b565b600b6000878152602001908152602001600020546040518463ffffffff1660e01b8152600401610e26939291906137fa565b6020604051808303816000875af1158015610e45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e699190613846565b506000610e768284611e96565b905060008190505b6001600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050610ecd9190613412565b811015610fae57600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600182610f209190613446565b81548110610f3157610f3061347a565b5b9060005260206000200154600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208281548110610f8d57610f8c61347a565b5b90600052602060002001819055508080610fa6906134a9565b915050610e7e565b50600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480610ffe57610ffd6134f1565b5b600190038181906000526020600020016000905590556110276110208461118b565b338561211f565b600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020839080600181540180825580915050600190039060005260206000200160009091909190915055823373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f7817bb79920d732df263bad59dcbf804d55cbf31b0d4b609522e04400bc4a099600b60008881526020019081526020016000205442604051611100929190613873565b60405180910390a4505050565b606061111882611ae1565b9050919050565b61113a838383604051806020016040528060008152506118e4565b505050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611233576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122a9061390e565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036112ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a3906139a0565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611383576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137a906132eb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611414576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140b90613357565b60405180910390fd5b80600b6000848152602001908152602001600020819055505050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146114e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114dd90613a0c565b60405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6060600180546115399061326e565b80601f01602080910402602001604051908101604052809291908181526020018280546115659061326e565b80156115b25780601f10611587576101008083540402835291602001916115b2565b820191906000526020600020905b81548152906001019060200180831161159557829003601f168201915b5050505050905090565b6115c4611f80565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611631576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162890613a78565b60405180910390fd5b806005600061163e611f80565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166116eb611f80565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516117309190612a8f565b60405180910390a35050565b6060600d80548060200260200160405190810160405280929190818152602001828054801561178a57602002820191906000526020600020905b815481526020019060010190808311611776575b5050505050905090565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611824576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181b906132eb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036118b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ac90613357565b60405180910390fd5b6001600c600083815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6118f56118ef611f80565b83612041565b611934576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192b90613748565b60405180910390fd5b6119408484848461237a565b50505050565b600061195b84611956600e6123d6565b6123e4565b600d611967600e6123d6565b90806001815401808255809150506001900390600052602060002001600090919091909150556119a061199a600e6123d6565b846125b1565b6119aa600e6123d6565b9050600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206119f5600e6123d6565b908060018154018082558091505060019003906000526020600020016000909190919091505581600b6000611a2a600e6123d6565b815260200190815260200160002081905550611a46600e611e16565b6000600c6000611a56600e6123d6565b815260200190815260200160002060006101000a81548160ff0219169083151502179055507f0eef326681f316cac3aedd86732a57ceb005efc1b65a2d7958b20131f053cadd611aa6600e6123d6565b42604051611ab5929190613873565b60405180910390a19392505050565b6000600b6000838152602001908152602001600020549050919050565b6060611aec82611f14565b611b2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2290613b0a565b60405180910390fd5b6000600660008481526020019081526020016000208054611b4b9061326e565b80601f0160208091040260200160405190810160405280929190818152602001828054611b779061326e565b8015611bc45780601f10611b9957610100808354040283529160200191611bc4565b820191906000526020600020905b815481529060010190602001808311611ba757829003601f168201915b505050505090506000611bd561261e565b90506000815103611bea578192505050611c2d565b600082511115611c1f578082604051602001611c07929190613b66565b60405160208183030381529060405292505050611c2d565b611c2884612635565b925050505b919050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611cc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb9906132eb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611d53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4a90613357565b60405180910390fd5b6000600c600083815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6001816000016000828254019250508190555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60005b81600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208281548110611eeb57611eea61347a565b5b906000526020600020015414611f0e578080611f06906134a9565b915050611e99565b92915050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611ffb8361118b565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061204c82611f14565b61208b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208290613bfc565b60405180910390fd5b60006120968361118b565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061210557508373ffffffffffffffffffffffffffffffffffffffff166120ed84610aa5565b73ffffffffffffffffffffffffffffffffffffffff16145b8061211657506121158185611d82565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661213f8261118b565b73ffffffffffffffffffffffffffffffffffffffff1614612195576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218c90613c8e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612204576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121fb90613d20565b60405180910390fd5b61220f8383836126dc565b61221a600082611f88565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461226a9190613412565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122c19190613446565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b61238584848461211f565b612391848484846126e1565b6123d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123c790613db2565b60405180910390fd5b50505050565b600081600001549050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612453576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244a90613e1e565b60405180910390fd5b61245c81611f14565b1561249c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249390613e8a565b60405180910390fd5b6124a8600083836126dc565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124f89190613446565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6125ba82611f14565b6125f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125f090613f1c565b60405180910390fd5b8060066000848152602001908152602001600020908161261991906140de565b505050565b606060405180602001604052806000815250905090565b606061264082611f14565b61267f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161267690614222565b60405180910390fd5b600061268961261e565b905060008151116126a957604051806020016040528060008152506126d4565b806126b384612868565b6040516020016126c4929190613b66565b6040516020818303038152906040525b915050919050565b505050565b60006127028473ffffffffffffffffffffffffffffffffffffffff166129c8565b1561285b578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261272b611f80565b8786866040518563ffffffff1660e01b815260040161274d9493929190614297565b6020604051808303816000875af192505050801561278957506040513d601f19601f8201168201806040525081019061278691906142f8565b60015b61280b573d80600081146127b9576040519150601f19603f3d011682016040523d82523d6000602084013e6127be565b606091505b506000815103612803576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127fa90613db2565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612860565b600190505b949350505050565b6060600082036128af576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506129c3565b600082905060005b600082146128e15780806128ca906134a9565b915050600a826128da9190614354565b91506128b7565b60008167ffffffffffffffff8111156128fd576128fc612f41565b5b6040519080825280601f01601f19166020018201604052801561292f5781602001600182028036833780820191505090505b5090505b600085146129bc576001826129489190613412565b9150600a856129579190614385565b60306129639190613446565b60f81b8183815181106129795761297861347a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856129b59190614354565b9450612933565b8093505050505b919050565b600080823b905060008111915050919050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612a24816129ef565b8114612a2f57600080fd5b50565b600081359050612a4181612a1b565b92915050565b600060208284031215612a5d57612a5c6129e5565b5b6000612a6b84828501612a32565b91505092915050565b60008115159050919050565b612a8981612a74565b82525050565b6000602082019050612aa46000830184612a80565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612ae4578082015181840152602081019050612ac9565b60008484015250505050565b6000601f19601f8301169050919050565b6000612b0c82612aaa565b612b168185612ab5565b9350612b26818560208601612ac6565b612b2f81612af0565b840191505092915050565b60006020820190508181036000830152612b548184612b01565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612b8782612b5c565b9050919050565b612b9781612b7c565b8114612ba257600080fd5b50565b600081359050612bb481612b8e565b92915050565b6000819050919050565b612bcd81612bba565b8114612bd857600080fd5b50565b600081359050612bea81612bc4565b92915050565b600080600060608486031215612c0957612c086129e5565b5b6000612c1786828701612ba5565b9350506020612c2886828701612ba5565b9250506040612c3986828701612bdb565b9150509250925092565b600060208284031215612c5957612c586129e5565b5b6000612c6784828501612bdb565b91505092915050565b612c7981612b7c565b82525050565b6000602082019050612c946000830184612c70565b92915050565b60008060408385031215612cb157612cb06129e5565b5b6000612cbf85828601612ba5565b9250506020612cd085828601612bdb565b9150509250929050565b600060208284031215612cf057612cef6129e5565b5b6000612cfe84828501612ba5565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612d3c81612bba565b82525050565b6000612d4e8383612d33565b60208301905092915050565b6000602082019050919050565b6000612d7282612d07565b612d7c8185612d12565b9350612d8783612d23565b8060005b83811015612db8578151612d9f8882612d42565b9750612daa83612d5a565b925050600181019050612d8b565b5085935050505092915050565b60006020820190508181036000830152612ddf8184612d67565b905092915050565b6000819050919050565b6000612e0c612e07612e0284612b5c565b612de7565b612b5c565b9050919050565b6000612e1e82612df1565b9050919050565b6000612e3082612e13565b9050919050565b612e4081612e25565b82525050565b6000602082019050612e5b6000830184612e37565b92915050565b612e6a81612bba565b82525050565b6000602082019050612e856000830184612e61565b92915050565b60008060408385031215612ea257612ea16129e5565b5b6000612eb085828601612bdb565b9250506020612ec185828601612bdb565b9150509250929050565b612ed481612a74565b8114612edf57600080fd5b50565b600081359050612ef181612ecb565b92915050565b60008060408385031215612f0e57612f0d6129e5565b5b6000612f1c85828601612ba5565b9250506020612f2d85828601612ee2565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612f7982612af0565b810181811067ffffffffffffffff82111715612f9857612f97612f41565b5b80604052505050565b6000612fab6129db565b9050612fb78282612f70565b919050565b600067ffffffffffffffff821115612fd757612fd6612f41565b5b612fe082612af0565b9050602081019050919050565b82818337600083830152505050565b600061300f61300a84612fbc565b612fa1565b90508281526020810184848401111561302b5761302a612f3c565b5b613036848285612fed565b509392505050565b600082601f83011261305357613052612f37565b5b8135613063848260208601612ffc565b91505092915050565b60008060008060808587031215613086576130856129e5565b5b600061309487828801612ba5565b94505060206130a587828801612ba5565b93505060406130b687828801612bdb565b925050606085013567ffffffffffffffff8111156130d7576130d66129ea565b5b6130e38782880161303e565b91505092959194509250565b600067ffffffffffffffff82111561310a57613109612f41565b5b61311382612af0565b9050602081019050919050565b600061313361312e846130ef565b612fa1565b90508281526020810184848401111561314f5761314e612f3c565b5b61315a848285612fed565b509392505050565b600082601f83011261317757613176612f37565b5b8135613187848260208601613120565b91505092915050565b6000806000606084860312156131a9576131a86129e5565b5b60006131b786828701612ba5565b935050602084013567ffffffffffffffff8111156131d8576131d76129ea565b5b6131e486828701613162565b92505060406131f586828701612bdb565b9150509250925092565b60008060408385031215613216576132156129e5565b5b600061322485828601612ba5565b925050602061323585828601612ba5565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061328657607f821691505b6020821081036132995761329861323f565b5b50919050565b7f4f6e6c792041756374696f6e20416464726573732063616e20646f2074686973600082015250565b60006132d5602083612ab5565b91506132e08261329f565b602082019050919050565b60006020820190508181036000830152613304816132c8565b9050919050565b7f41756374696f6e2061646472657373206e6f7420736574207965740000000000600082015250565b6000613341601b83612ab5565b915061334c8261330b565b602082019050919050565b6000602082019050818103600083015261337081613334565b9050919050565b7f4172726179206f7574206f6620626f756e640000000000000000000000000000600082015250565b60006133ad601283612ab5565b91506133b882613377565b602082019050919050565b600060208201905081810360008301526133dc816133a0565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061341d82612bba565b915061342883612bba565b92508282039050818111156134405761343f6133e3565b5b92915050565b600061345182612bba565b915061345c83612bba565b9250828201905080821115613474576134736133e3565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006134b482612bba565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036134e6576134e56133e3565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b600061357c602c83612ab5565b915061358782613520565b604082019050919050565b600060208201905081810360008301526135ab8161356f565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b600061360e602183612ab5565b9150613619826135b2565b604082019050919050565b6000602082019050818103600083015261363d81613601565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b60006136a0603883612ab5565b91506136ab82613644565b604082019050919050565b600060208201905081810360008301526136cf81613693565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6000613732603183612ab5565b915061373d826136d6565b604082019050919050565b6000602082019050818103600083015261376181613725565b9050919050565b7f5468697320746f6b656e20697320616c7265616479206f6e2041756374696f6e60008201527f2e204275792066726f6d20746865726500000000000000000000000000000000602082015250565b60006137c4603083612ab5565b91506137cf82613768565b604082019050919050565b600060208201905081810360008301526137f3816137b7565b9050919050565b600060608201905061380f6000830186612c70565b61381c6020830185612c70565b6138296040830184612e61565b949350505050565b60008151905061384081612ecb565b92915050565b60006020828403121561385c5761385b6129e5565b5b600061386a84828501613831565b91505092915050565b60006040820190506138886000830185612e61565b6138956020830184612e61565b9392505050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b60006138f8602983612ab5565b91506139038261389c565b604082019050919050565b60006020820190508181036000830152613927816138eb565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b600061398a602a83612ab5565b91506139958261392e565b604082019050919050565b600060208201905081810360008301526139b98161397d565b9050919050565b7f41636365737320666f7262696464656e00000000000000000000000000000000600082015250565b60006139f6601083612ab5565b9150613a01826139c0565b602082019050919050565b60006020820190508181036000830152613a25816139e9565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000613a62601983612ab5565b9150613a6d82613a2c565b602082019050919050565b60006020820190508181036000830152613a9181613a55565b9050919050565b7f45524337323155524953746f726167653a2055524920717565727920666f722060008201527f6e6f6e6578697374656e7420746f6b656e000000000000000000000000000000602082015250565b6000613af4603183612ab5565b9150613aff82613a98565b604082019050919050565b60006020820190508181036000830152613b2381613ae7565b9050919050565b600081905092915050565b6000613b4082612aaa565b613b4a8185613b2a565b9350613b5a818560208601612ac6565b80840191505092915050565b6000613b728285613b35565b9150613b7e8284613b35565b91508190509392505050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000613be6602c83612ab5565b9150613bf182613b8a565b604082019050919050565b60006020820190508181036000830152613c1581613bd9565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b6000613c78602983612ab5565b9150613c8382613c1c565b604082019050919050565b60006020820190508181036000830152613ca781613c6b565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613d0a602483612ab5565b9150613d1582613cae565b604082019050919050565b60006020820190508181036000830152613d3981613cfd565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000613d9c603283612ab5565b9150613da782613d40565b604082019050919050565b60006020820190508181036000830152613dcb81613d8f565b9050919050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000613e08602083612ab5565b9150613e1382613dd2565b602082019050919050565b60006020820190508181036000830152613e3781613dfb565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000613e74601c83612ab5565b9150613e7f82613e3e565b602082019050919050565b60006020820190508181036000830152613ea381613e67565b9050919050565b7f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60008201527f6578697374656e7420746f6b656e000000000000000000000000000000000000602082015250565b6000613f06602e83612ab5565b9150613f1182613eaa565b604082019050919050565b60006020820190508181036000830152613f3581613ef9565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302613f9e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613f61565b613fa88683613f61565b95508019841693508086168417925050509392505050565b6000613fdb613fd6613fd184612bba565b612de7565b612bba565b9050919050565b6000819050919050565b613ff583613fc0565b61400961400182613fe2565b848454613f6e565b825550505050565b600090565b61401e614011565b614029818484613fec565b505050565b5b8181101561404d57614042600082614016565b60018101905061402f565b5050565b601f8211156140925761406381613f3c565b61406c84613f51565b8101602085101561407b578190505b61408f61408785613f51565b83018261402e565b50505b505050565b600082821c905092915050565b60006140b560001984600802614097565b1980831691505092915050565b60006140ce83836140a4565b9150826002028217905092915050565b6140e782612aaa565b67ffffffffffffffff811115614100576140ff612f41565b5b61410a825461326e565b614115828285614051565b600060209050601f8311600181146141485760008415614136578287015190505b61414085826140c2565b8655506141a8565b601f19841661415686613f3c565b60005b8281101561417e57848901518255600182019150602085019450602081019050614159565b8683101561419b5784890151614197601f8916826140a4565b8355505b6001600288020188555050505b505050505050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b600061420c602f83612ab5565b9150614217826141b0565b604082019050919050565b6000602082019050818103600083015261423b816141ff565b9050919050565b600081519050919050565b600082825260208201905092915050565b600061426982614242565b614273818561424d565b9350614283818560208601612ac6565b61428c81612af0565b840191505092915050565b60006080820190506142ac6000830187612c70565b6142b96020830186612c70565b6142c66040830185612e61565b81810360608301526142d8818461425e565b905095945050505050565b6000815190506142f281612a1b565b92915050565b60006020828403121561430e5761430d6129e5565b5b600061431c848285016142e3565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061435f82612bba565b915061436a83612bba565b92508261437a57614379614325565b5b828204905092915050565b600061439082612bba565b915061439b83612bba565b9250826143ab576143aa614325565b5b82820690509291505056fea264697066735822122022436268a9abfd2582975e31c3d5f135e9a63f64b80a225af2b570f5a8047f3564736f6c63430008120033000000000000000000000000a42d3dcecae2cdaf395387efac30f5e682babd0b