60806040523480156200001157600080fd5b5060405162004c6538038062004c658339818101604052810190620000379190620003fa565b60405180608001604052806052815260200162004c13605291396200006281620001b160201b60201c565b506200008362000077620001cd60201b60201c565b620001d560201b60201c565b83600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600c819055506000600d819055506000600e819055506000600f8190555050505050620004d0565b8060029080519060200190620001c99291906200029b565b5050565b600033905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620002a9906200049b565b90600052602060002090601f016020900481019282620002cd576000855562000319565b82601f10620002e857805160ff191683800117855562000319565b8280016001018555821562000319579182015b8281111562000318578251825591602001919060010190620002fb565b5b5090506200032891906200032c565b5090565b5b80821115620003475760008160009055506001016200032d565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200037d8262000350565b9050919050565b6200038f8162000370565b81146200039b57600080fd5b50565b600081519050620003af8162000384565b92915050565b6000620003c28262000370565b9050919050565b620003d481620003b5565b8114620003e057600080fd5b50565b600081519050620003f481620003c9565b92915050565b600080600080608085870312156200041757620004166200034b565b5b600062000427878288016200039e565b94505060206200043a878288016200039e565b93505060406200044d878288016200039e565b92505060606200046087828801620003e3565b91505092959194509250565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620004b457607f821691505b602082108103620004ca57620004c96200046c565b5b50919050565b61473380620004e06000396000f3fe608060405234801561001057600080fd5b50600436106101fa5760003560e01c806379d73d171161011a578063c980adee116100ad578063ea67a1221161007c578063ea67a1221461058b578063f242432a146105a9578063f2fde38b146105c5578063f5298aca146105e1578063fa56ac97146105fd576101fa565b8063c980adee14610501578063d5f394881461051f578063e48257871461053d578063e985e9c51461055b576101fa565b8063ae9b6e12116100e9578063ae9b6e1214610479578063b38633b814610497578063b452ae43146104b3578063b7199cef146104d1576101fa565b806379d73d17146104055780638da5cb5b14610423578063a22cb46514610441578063aa60e7331461045d576101fa565b80632a6d9e921161019257806360ab19db1161016157806360ab19db146103a35780636ad48e90146103c15780636b20c454146103df578063715018a6146103fb576101fa565b80632a6d9e921461031d5780632eb2c2d614610339578063427e10b9146103555780634e1273f414610373576101fa565b8063181c0ef6116101ce578063181c0ef6146102ab5780631f7fdffa146102c757806320bb6339146102e3578063276b597514610301576101fa565b8062fdd58e146101ff57806301ffc9a71461022f57806302fe53051461025f5780630e89341c1461027b575b600080fd5b61021960048036038101906102149190612c82565b61061b565b6040516102269190612cd1565b60405180910390f35b61024960048036038101906102449190612d44565b6106e3565b6040516102569190612d8c565b60405180910390f35b61027960048036038101906102749190612eed565b6107c5565b005b61029560048036038101906102909190612f36565b61082b565b6040516102a29190612feb565b60405180910390f35b6102c560048036038101906102c0919061300d565b6108bf565b005b6102e160048036038101906102dc91906131dd565b61093b565b005b6102eb6109dd565b6040516102f89190612cd1565b60405180910390f35b61031b60048036038101906103169190613298565b6109e3565b005b610337600480360381019061033291906132c5565b610a81565b005b610353600480360381019061034e919061335c565b610c7f565b005b61035d610d20565b60405161036a919061348a565b60405180910390f35b61038d60048036038101906103889190613568565b610d46565b60405161039a919061369e565b60405180910390f35b6103ab610e5f565b6040516103b891906136cf565b60405180910390f35b6103c9610e85565b6040516103d69190612cd1565b60405180910390f35b6103f960048036038101906103f491906136ea565b610e8b565b005b610403610f28565b005b61040d610fb0565b60405161041a9190612cd1565b60405180910390f35b61042b610fb6565b60405161043891906136cf565b60405180910390f35b61045b600480360381019061045691906137a1565b610fe0565b005b61047760048036038101906104729190612f36565b610ff6565b005b610481611116565b60405161048e91906136cf565b60405180910390f35b6104b160048036038101906104ac91906137e1565b61113c565b005b6104bb611168565b6040516104c89190612cd1565b60405180910390f35b6104eb60048036038101906104e69190612f36565b61116e565b6040516104f89190612feb565b60405180910390f35b610509611213565b6040516105169190612cd1565b60405180910390f35b610527611219565b60405161053491906136cf565b60405180910390f35b61054561123f565b6040516105529190612cd1565b60405180910390f35b6105756004803603810190610570919061383d565b611245565b6040516105829190612d8c565b60405180910390f35b6105936112d9565b6040516105a09190612cd1565b60405180910390f35b6105c360048036038101906105be919061387d565b6112df565b005b6105df60048036038101906105da9190613298565b611380565b005b6105fb60048036038101906105f69190613914565b611477565b005b61060561156c565b6040516106129190612cd1565b60405180910390f35b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361068b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610682906139d9565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806107ae57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806107be57506107bd82611572565b5b9050919050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461081f57600080fd5b610828816115dc565b50565b60606002805461083a90613a28565b80601f016020809104026020016040519081016040528092919081815260200182805461086690613a28565b80156108b35780601f10610888576101008083540402835291602001916108b3565b820191906000526020600020905b81548152906001019060200180831161089657829003601f168201915b50505050509050919050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461091957600080fd5b81600b819055508360088190555082600a819055508060098190555050505050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146109cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c290613aa5565b60405180910390fd5b6109d7848484846115f6565b50505050565b600d5481565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610a3d57600080fd5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b682567ac70392b8800008114610a9657600080fd5b60008414158015610aa75750600584105b610ab057600080fd5b60018403610ae757600854600c541015610ae157600c6000815480929190610ad790613af4565b9190505550610ae6565b600080fd5b5b60028403610b1e57600954600d541015610b1857600d6000815480929190610b0e90613af4565b9190505550610b1d565b600080fd5b5b60038403610b5557600a54600e541015610b4f57600e6000815480929190610b4590613af4565b9190505550610b54565b600080fd5b5b60048403610b8c57600b54600f541015610b8657600f6000815480929190610b7c90613af4565b9190505550610b8b565b600080fd5b5b7f09cb1dc107e11b68facf6d63a1c0a47ed4095383ae178bd8301c1cead0111e9b85858585604051610bc19493929190613b91565b60405180910390a1610bd585858585611822565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b8152600401610c3493929190613bdd565b6020604051808303816000875af1158015610c53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c779190613c29565b505050505050565b610c876119d2565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610ccd5750610ccc85610cc76119d2565b611245565b5b610d0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0390613cc8565b60405180910390fd5b610d1985858585856119da565b5050505050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60608151835114610d8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8390613d5a565b60405180910390fd5b6000835167ffffffffffffffff811115610da957610da8612dc2565b5b604051908082528060200260200182016040528015610dd75781602001602082028036833780820191505090505b50905060005b8451811015610e5457610e24858281518110610dfc57610dfb613d7a565b5b6020026020010151858381518110610e1757610e16613d7a565b5b602002602001015161061b565b828281518110610e3757610e36613d7a565b5b60200260200101818152505080610e4d90613af4565b9050610ddd565b508091505092915050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a5481565b610e936119d2565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480610ed95750610ed883610ed36119d2565b611245565b5b610f18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0f90613e1b565b60405180910390fd5b610f23838383611cfb565b505050565b610f306119d2565b73ffffffffffffffffffffffffffffffffffffffff16610f4e610fb6565b73ffffffffffffffffffffffffffffffffffffffff1614610fa4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9b90613e87565b60405180910390fd5b610fae6000611fc9565b565b60095481565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610ff2610feb6119d2565b838361208f565b5050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461105057600080fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b81526004016110cf929190613ea7565b6020604051808303816000875af11580156110ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111129190613c29565b5050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b80601060008481526020019081526020016000209080519060200190611163929190612b37565b505050565b600b5481565b606060106000838152602001908152602001600020805461118e90613a28565b80601f01602080910402602001604051908101604052809291908181526020018280546111ba90613a28565b80156112075780601f106111dc57610100808354040283529160200191611207565b820191906000526020600020905b8154815290600101906020018083116111ea57829003601f168201915b50505050509050919050565b600e5481565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60085481565b6112e76119d2565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061132d575061132c856113276119d2565b611245565b5b61136c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136390613e1b565b60405180910390fd5b61137985858585856121fb565b5050505050565b6113886119d2565b73ffffffffffffffffffffffffffffffffffffffff166113a6610fb6565b73ffffffffffffffffffffffffffffffffffffffff16146113fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f390613e87565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361146b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146290613f42565b60405180910390fd5b61147481611fc9565b50565b61147f6119d2565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614806114c557506114c4836114bf6119d2565b611245565b5b8061151d5750600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61155c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155390613e1b565b60405180910390fd5b611567838383612496565b505050565b600c5481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b80600290805190602001906115f2929190612b37565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611665576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165c90613fd4565b60405180910390fd5b81518351146116a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a090614066565b60405180910390fd5b60006116b36119d2565b90506116c4816000878787876126dc565b60005b845181101561177d578381815181106116e3576116e2613d7a565b5b602002602001015160008087848151811061170157611700613d7a565b5b6020026020010151815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546117639190614086565b92505081905550808061177590613af4565b9150506116c7565b508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516117f59291906140dc565b60405180910390a461180c816000878787876126e4565b61181b816000878787876126ec565b5050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611891576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188890613fd4565b60405180910390fd5b600061189b6119d2565b905060006118a8856128c3565b905060006118b5856128c3565b90506118c6836000898585896126dc565b8460008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546119259190614086565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6289896040516119a3929190614113565b60405180910390a46119ba836000898585896126e4565b6119c98360008989898961293d565b50505050505050565b600033905090565b8151835114611a1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1590614066565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611a8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a84906141ae565b60405180910390fd5b6000611a976119d2565b9050611aa78187878787876126dc565b60005b8451811015611c58576000858281518110611ac857611ac7613d7a565b5b602002602001015190506000858381518110611ae757611ae6613d7a565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611b88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7f90614240565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c3d9190614086565b9250508190555050505080611c5190613af4565b9050611aaa565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611ccf9291906140dc565b60405180910390a4611ce58187878787876126e4565b611cf38187878787876126ec565b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611d6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d61906142d2565b60405180910390fd5b8051825114611dae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da590614066565b60405180910390fd5b6000611db86119d2565b9050611dd8818560008686604051806020016040528060008152506126dc565b60005b8351811015611f25576000848281518110611df957611df8613d7a565b5b602002602001015190506000848381518110611e1857611e17613d7a565b5b60200260200101519050600080600084815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611eb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb090614364565b60405180910390fd5b81810360008085815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050508080611f1d90613af4565b915050611ddb565b50600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051611f9d9291906140dc565b60405180910390a4611fc3818560008686604051806020016040528060008152506126e4565b50505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036120fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f4906143f6565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516121ee9190612d8c565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361226a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612261906141ae565b60405180910390fd5b60006122746119d2565b90506000612281856128c3565b9050600061228e856128c3565b905061229e8389898585896126dc565b600080600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905085811015612335576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232c90614240565b60405180910390fd5b85810360008089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508560008089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123ea9190614086565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a604051612467929190614113565b60405180910390a461247d848a8a86868a6126e4565b61248b848a8a8a8a8a61293d565b505050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612505576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124fc906142d2565b60405180910390fd5b600061250f6119d2565b9050600061251c846128c3565b90506000612529846128c3565b9050612549838760008585604051806020016040528060008152506126dc565b600080600087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050848110156125e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125d790614364565b60405180910390fd5b84810360008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6289896040516126ad929190614113565b60405180910390a46126d3848860008686604051806020016040528060008152506126e4565b50505050505050565b505050505050565b505050505050565b61270b8473ffffffffffffffffffffffffffffffffffffffff16612b14565b156128bb578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401612751959493929190614416565b6020604051808303816000875af192505050801561278d57506040513d601f19601f8201168201806040525081019061278a9190614493565b60015b612832576127996144cd565b806308c379a0036127f557506127ad6144ef565b806127b857506127f7565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ec9190612feb565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612829906145f1565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146128b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b090614683565b60405180910390fd5b505b505050505050565b60606000600167ffffffffffffffff8111156128e2576128e1612dc2565b5b6040519080825280602002602001820160405280156129105781602001602082028036833780820191505090505b509050828160008151811061292857612927613d7a565b5b60200260200101818152505080915050919050565b61295c8473ffffffffffffffffffffffffffffffffffffffff16612b14565b15612b0c578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b81526004016129a29594939291906146a3565b6020604051808303816000875af19250505080156129de57506040513d601f19601f820116820180604052508101906129db9190614493565b60015b612a83576129ea6144cd565b806308c379a003612a4657506129fe6144ef565b80612a095750612a48565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a3d9190612feb565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a7a906145f1565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612b0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0190614683565b60405180910390fd5b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b828054612b4390613a28565b90600052602060002090601f016020900481019282612b655760008555612bac565b82601f10612b7e57805160ff1916838001178555612bac565b82800160010185558215612bac579182015b82811115612bab578251825591602001919060010190612b90565b5b509050612bb99190612bbd565b5090565b5b80821115612bd6576000816000905550600101612bbe565b5090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612c1982612bee565b9050919050565b612c2981612c0e565b8114612c3457600080fd5b50565b600081359050612c4681612c20565b92915050565b6000819050919050565b612c5f81612c4c565b8114612c6a57600080fd5b50565b600081359050612c7c81612c56565b92915050565b60008060408385031215612c9957612c98612be4565b5b6000612ca785828601612c37565b9250506020612cb885828601612c6d565b9150509250929050565b612ccb81612c4c565b82525050565b6000602082019050612ce66000830184612cc2565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612d2181612cec565b8114612d2c57600080fd5b50565b600081359050612d3e81612d18565b92915050565b600060208284031215612d5a57612d59612be4565b5b6000612d6884828501612d2f565b91505092915050565b60008115159050919050565b612d8681612d71565b82525050565b6000602082019050612da16000830184612d7d565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612dfa82612db1565b810181811067ffffffffffffffff82111715612e1957612e18612dc2565b5b80604052505050565b6000612e2c612bda565b9050612e388282612df1565b919050565b600067ffffffffffffffff821115612e5857612e57612dc2565b5b612e6182612db1565b9050602081019050919050565b82818337600083830152505050565b6000612e90612e8b84612e3d565b612e22565b905082815260208101848484011115612eac57612eab612dac565b5b612eb7848285612e6e565b509392505050565b600082601f830112612ed457612ed3612da7565b5b8135612ee4848260208601612e7d565b91505092915050565b600060208284031215612f0357612f02612be4565b5b600082013567ffffffffffffffff811115612f2157612f20612be9565b5b612f2d84828501612ebf565b91505092915050565b600060208284031215612f4c57612f4b612be4565b5b6000612f5a84828501612c6d565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612f9d578082015181840152602081019050612f82565b83811115612fac576000848401525b50505050565b6000612fbd82612f63565b612fc78185612f6e565b9350612fd7818560208601612f7f565b612fe081612db1565b840191505092915050565b600060208201905081810360008301526130058184612fb2565b905092915050565b6000806000806080858703121561302757613026612be4565b5b600061303587828801612c6d565b945050602061304687828801612c6d565b935050604061305787828801612c6d565b925050606061306887828801612c6d565b91505092959194509250565b600067ffffffffffffffff82111561308f5761308e612dc2565b5b602082029050602081019050919050565b600080fd5b60006130b86130b384613074565b612e22565b905080838252602082019050602084028301858111156130db576130da6130a0565b5b835b8181101561310457806130f08882612c6d565b8452602084019350506020810190506130dd565b5050509392505050565b600082601f83011261312357613122612da7565b5b81356131338482602086016130a5565b91505092915050565b600067ffffffffffffffff82111561315757613156612dc2565b5b61316082612db1565b9050602081019050919050565b600061318061317b8461313c565b612e22565b90508281526020810184848401111561319c5761319b612dac565b5b6131a7848285612e6e565b509392505050565b600082601f8301126131c4576131c3612da7565b5b81356131d484826020860161316d565b91505092915050565b600080600080608085870312156131f7576131f6612be4565b5b600061320587828801612c37565b945050602085013567ffffffffffffffff81111561322657613225612be9565b5b6132328782880161310e565b935050604085013567ffffffffffffffff81111561325357613252612be9565b5b61325f8782880161310e565b925050606085013567ffffffffffffffff8111156132805761327f612be9565b5b61328c878288016131af565b91505092959194509250565b6000602082840312156132ae576132ad612be4565b5b60006132bc84828501612c37565b91505092915050565b600080600080600060a086880312156132e1576132e0612be4565b5b60006132ef88828901612c37565b955050602061330088828901612c6d565b945050604061331188828901612c6d565b935050606086013567ffffffffffffffff81111561333257613331612be9565b5b61333e888289016131af565b925050608061334f88828901612c6d565b9150509295509295909350565b600080600080600060a0868803121561337857613377612be4565b5b600061338688828901612c37565b955050602061339788828901612c37565b945050604086013567ffffffffffffffff8111156133b8576133b7612be9565b5b6133c48882890161310e565b935050606086013567ffffffffffffffff8111156133e5576133e4612be9565b5b6133f18882890161310e565b925050608086013567ffffffffffffffff81111561341257613411612be9565b5b61341e888289016131af565b9150509295509295909350565b6000819050919050565b600061345061344b61344684612bee565b61342b565b612bee565b9050919050565b600061346282613435565b9050919050565b600061347482613457565b9050919050565b61348481613469565b82525050565b600060208201905061349f600083018461347b565b92915050565b600067ffffffffffffffff8211156134c0576134bf612dc2565b5b602082029050602081019050919050565b60006134e46134df846134a5565b612e22565b90508083825260208201905060208402830185811115613507576135066130a0565b5b835b81811015613530578061351c8882612c37565b845260208401935050602081019050613509565b5050509392505050565b600082601f83011261354f5761354e612da7565b5b813561355f8482602086016134d1565b91505092915050565b6000806040838503121561357f5761357e612be4565b5b600083013567ffffffffffffffff81111561359d5761359c612be9565b5b6135a98582860161353a565b925050602083013567ffffffffffffffff8111156135ca576135c9612be9565b5b6135d68582860161310e565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61361581612c4c565b82525050565b6000613627838361360c565b60208301905092915050565b6000602082019050919050565b600061364b826135e0565b61365581856135eb565b9350613660836135fc565b8060005b83811015613691578151613678888261361b565b975061368383613633565b925050600181019050613664565b5085935050505092915050565b600060208201905081810360008301526136b88184613640565b905092915050565b6136c981612c0e565b82525050565b60006020820190506136e460008301846136c0565b92915050565b60008060006060848603121561370357613702612be4565b5b600061371186828701612c37565b935050602084013567ffffffffffffffff81111561373257613731612be9565b5b61373e8682870161310e565b925050604084013567ffffffffffffffff81111561375f5761375e612be9565b5b61376b8682870161310e565b9150509250925092565b61377e81612d71565b811461378957600080fd5b50565b60008135905061379b81613775565b92915050565b600080604083850312156137b8576137b7612be4565b5b60006137c685828601612c37565b92505060206137d78582860161378c565b9150509250929050565b600080604083850312156137f8576137f7612be4565b5b600061380685828601612c6d565b925050602083013567ffffffffffffffff81111561382757613826612be9565b5b61383385828601612ebf565b9150509250929050565b6000806040838503121561385457613853612be4565b5b600061386285828601612c37565b925050602061387385828601612c37565b9150509250929050565b600080600080600060a0868803121561389957613898612be4565b5b60006138a788828901612c37565b95505060206138b888828901612c37565b94505060406138c988828901612c6d565b93505060606138da88828901612c6d565b925050608086013567ffffffffffffffff8111156138fb576138fa612be9565b5b613907888289016131af565b9150509295509295909350565b60008060006060848603121561392d5761392c612be4565b5b600061393b86828701612c37565b935050602061394c86828701612c6d565b925050604061395d86828701612c6d565b9150509250925092565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b60006139c3602b83612f6e565b91506139ce82613967565b604082019050919050565b600060208201905081810360008301526139f2816139b6565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613a4057607f821691505b602082108103613a5357613a526139f9565b5b50919050565b7f796f7520617265206e6f7420746865206465706c6f7965720000000000000000600082015250565b6000613a8f601883612f6e565b9150613a9a82613a59565b602082019050919050565b60006020820190508181036000830152613abe81613a82565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613aff82612c4c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613b3157613b30613ac5565b5b600182019050919050565b600081519050919050565b600082825260208201905092915050565b6000613b6382613b3c565b613b6d8185613b47565b9350613b7d818560208601612f7f565b613b8681612db1565b840191505092915050565b6000608082019050613ba660008301876136c0565b613bb36020830186612cc2565b613bc06040830185612cc2565b8181036060830152613bd28184613b58565b905095945050505050565b6000606082019050613bf260008301866136c0565b613bff60208301856136c0565b613c0c6040830184612cc2565b949350505050565b600081519050613c2381613775565b92915050565b600060208284031215613c3f57613c3e612be4565b5b6000613c4d84828501613c14565b91505092915050565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b6000613cb2603283612f6e565b9150613cbd82613c56565b604082019050919050565b60006020820190508181036000830152613ce181613ca5565b9050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b6000613d44602983612f6e565b9150613d4f82613ce8565b604082019050919050565b60006020820190508181036000830152613d7381613d37565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b6000613e05602983612f6e565b9150613e1082613da9565b604082019050919050565b60006020820190508181036000830152613e3481613df8565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613e71602083612f6e565b9150613e7c82613e3b565b602082019050919050565b60006020820190508181036000830152613ea081613e64565b9050919050565b6000604082019050613ebc60008301856136c0565b613ec96020830184612cc2565b9392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613f2c602683612f6e565b9150613f3782613ed0565b604082019050919050565b60006020820190508181036000830152613f5b81613f1f565b9050919050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000613fbe602183612f6e565b9150613fc982613f62565b604082019050919050565b60006020820190508181036000830152613fed81613fb1565b9050919050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b6000614050602883612f6e565b915061405b82613ff4565b604082019050919050565b6000602082019050818103600083015261407f81614043565b9050919050565b600061409182612c4c565b915061409c83612c4c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156140d1576140d0613ac5565b5b828201905092915050565b600060408201905081810360008301526140f68185613640565b9050818103602083015261410a8184613640565b90509392505050565b60006040820190506141286000830185612cc2565b6141356020830184612cc2565b9392505050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614198602583612f6e565b91506141a38261413c565b604082019050919050565b600060208201905081810360008301526141c78161418b565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b600061422a602a83612f6e565b9150614235826141ce565b604082019050919050565b600060208201905081810360008301526142598161421d565b9050919050565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006142bc602383612f6e565b91506142c782614260565b604082019050919050565b600060208201905081810360008301526142eb816142af565b9050919050565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b600061434e602483612f6e565b9150614359826142f2565b604082019050919050565b6000602082019050818103600083015261437d81614341565b9050919050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b60006143e0602983612f6e565b91506143eb82614384565b604082019050919050565b6000602082019050818103600083015261440f816143d3565b9050919050565b600060a08201905061442b60008301886136c0565b61443860208301876136c0565b818103604083015261444a8186613640565b9050818103606083015261445e8185613640565b905081810360808301526144728184613b58565b90509695505050505050565b60008151905061448d81612d18565b92915050565b6000602082840312156144a9576144a8612be4565b5b60006144b78482850161447e565b91505092915050565b60008160e01c9050919050565b600060033d11156144ec5760046000803e6144e96000516144c0565b90505b90565b600060443d1061457c57614501612bda565b60043d036004823e80513d602482011167ffffffffffffffff8211171561452957505061457c565b808201805167ffffffffffffffff811115614547575050505061457c565b80602083010160043d03850181111561456457505050505061457c565b61457382602001850186612df1565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b60006145db603483612f6e565b91506145e68261457f565b604082019050919050565b6000602082019050818103600083015261460a816145ce565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b600061466d602883612f6e565b915061467882614611565b604082019050919050565b6000602082019050818103600083015261469c81614660565b9050919050565b600060a0820190506146b860008301886136c0565b6146c560208301876136c0565b6146d26040830186612cc2565b6146df6060830185612cc2565b81810360808301526146f18184613b58565b9050969550505050505056fea264697066735822122040e0b0725f88f367294ce281d33e4ce1b5cb22f07086f80e0e389c7689fd33a564736f6c634300080d003368747470733a2f2f726f61737465642e6d7970696e6174612e636c6f75642f697066732f516d517a4c447a327947644c58473554626a6b7a356b76656e574e75746f6a75484a34387778384d64796577696100000000000000000000000005230e33776363bf71be8f0a82b604e6b4714c9200000000000000000000000005230e33776363bf71be8f0a82b604e6b4714c9200000000000000000000000005230e33776363bf71be8f0a82b604e6b4714c92000000000000000000000000302abf007c2045f1bc0867a4b7abaae2152e0eb3