608060405273aabcf84c4e17f4e8348ce599f9a660902c5c65e1600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600d5534801561006a57600080fd5b506000469050604051808062004f6c60529139605201905060405180910390206040518060400160405280600281526020017f4e61000000000000000000000000000000000000000000000000000000000000815250805190602001206040518060400160405280600181526020017f3100000000000000000000000000000000000000000000000000000000000000815250805190602001208330604051602001808681526020018581526020018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200195505050505050604051602081830303815290604052805190602001206003819055505033600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550614da080620001cc6000396000f3fe608060405234801561001057600080fd5b50600436106101fb5760003560e01c80636a6278421161011a578063ba9a7a56116100ad578063d505accf1161007c578063d505accf14610a2e578063dd62ed3e14610ac7578063eebe2e1314610b3f578063f9ae39d014610b49578063fff6cae914610b53576101fb565b8063ba9a7a5614610938578063bc25cf7714610956578063c45a01551461099a578063d21220a7146109e4576101fb565b806389afcb44116100e957806389afcb44146107a65780638da5cb5b1461080557806395d89b411461084f578063a9059cbb146108d2576101fb565b80636a6278421461068057806370a08231146106d85780637464fc3d146107305780637ecebe001461074e576101fb565b806323b872dd11610192578063394dbd6b11610161578063394dbd6b146105be578063485cc955146105e05780635909c0d5146106445780635a3d549314610662576101fb565b806323b872dd146104d857806330adf81f1461055e578063313ce5671461057c5780633644e515146105a0576101fb565b80630dfe1681116101ce5780630dfe16811461040e57806313af40351461045857806318160ddd1461049c5780631efba6c2146104ba576101fb565b8063022c0d9f1461020057806306fdde03146102ad5780630902f1ac14610330578063095ea7b3146103a8575b600080fd5b6102ab6004803603608081101561021657600080fd5b810190808035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561026757600080fd5b82018360208201111561027957600080fd5b8035906020019184600183028401116401000000008311171561029b57600080fd5b9091929391929390505050610b5d565b005b6102b5612241565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102f55780820151818401526020810190506102da565b50505050905090810190601f1680156103225780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61033861227a565b60405180846dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff168152602001836dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff1681526020018263ffffffff1663ffffffff168152602001935050505060405180910390f35b6103f4600480360360408110156103be57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506122d7565b604051808215151515815260200191505060405180910390f35b6104166122ee565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61049a6004803603602081101561046e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612314565b005b6104a4612484565b6040518082815260200191505060405180910390f35b6104c261248a565b6040518082815260200191505060405180910390f35b610544600480360360608110156104ee57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612490565b604051808215151515815260200191505060405180910390f35b61056661265b565b6040518082815260200191505060405180910390f35b610584612682565b604051808260ff1660ff16815260200191505060405180910390f35b6105a8612687565b6040518082815260200191505060405180910390f35b6105c661268d565b604051808215151515815260200191505060405180910390f35b610642600480360360408110156105f657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506126a0565b005b61064c6127e9565b6040518082815260200191505060405180910390f35b61066a6127ef565b6040518082815260200191505060405180910390f35b6106c26004803603602081101561069657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506127f5565b6040518082815260200191505060405180910390f35b61071a600480360360208110156106ee57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612d4e565b6040518082815260200191505060405180910390f35b610738612d66565b6040518082815260200191505060405180910390f35b6107906004803603602081101561076457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612d6c565b6040518082815260200191505060405180910390f35b6107e8600480360360208110156107bc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612d84565b604051808381526020018281526020019250505060405180910390f35b61080d613371565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610857613397565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561089757808201518184015260208101905061087c565b50505050905090810190601f1680156108c45780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61091e600480360360408110156108e857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506133d0565b604051808215151515815260200191505060405180910390f35b6109406133e7565b6040518082815260200191505060405180910390f35b6109986004803603602081101561096c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506133ed565b005b6109a26136c8565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6109ec6136ee565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610ac5600480360360e0811015610a4457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803560ff1690602001909291908035906020019092919080359060200190929190505050613714565b005b610b2960048036036040811015610add57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613a58565b6040518082815260200191505060405180910390f35b610b47613a7d565b005b610b51613ad6565b005b610b5b613af3565b005b6001600d5414610bd5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f464f433a204c4f434b454400000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000600d819055506000851180610bec5750600084115b610c5e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f464f433a20494e53554646494349454e545f4f55545055545f414d4f554e540081525060200191505060405180910390fd5b600080610c6961227a565b5091509150816dffffffffffffffffffffffffffff1687108015610c9c5750806dffffffffffffffffffffffffffff1686105b610d0e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f464f433a20494e53554646494349454e545f4c4951554944495459000000000081525060200191505060405180910390fd5b6000806000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508173ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1614158015610dc757508073ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1614155b610e39576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f464f433a20494e56414c49445f544f000000000000000000000000000000000081525060200191505060405180910390fd5b60008b1115610e4e57610e4d828a8d613d73565b5b60008a1115610e6357610e62818a8c613d73565b5b6000888890501115610f4b578873ffffffffffffffffffffffffffffffffffffffff16635da6aaf3338d8d8c8c6040518663ffffffff1660e01b8152600401808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f8201169050808301925050509650505050505050600060405180830381600087803b158015610f3257600080fd5b505af1158015610f46573d6000803e3d6000fd5b505050505b8173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610fc857600080fd5b505afa158015610fdc573d6000803e3d6000fd5b505050506040513d6020811015610ff257600080fd5b810190808051906020019092919050505093508073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561108257600080fd5b505afa158015611096573d6000803e3d6000fd5b505050506040513d60208110156110ac57600080fd5b810190808051906020019092919050505092505050600089856dffffffffffffffffffffffffffff160383116110e35760006110f9565b89856dffffffffffffffffffffffffffff160383035b9050600089856dffffffffffffffffffffffffffff1603831161111d576000611133565b89856dffffffffffffffffffffffffffff160383035b905060008211806111445750600081115b6111b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f464f433a20494e53554646494349454e545f494e5055545f414d4f554e54000081525060200191505060405180910390fd5b60008a11156115ce5760006103e860058c02816111cf57fe5b04905060008111156115cc5780600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a082318c6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561127b57600080fd5b505afa15801561128f573d6000803e3d6000fd5b505050506040513d60208110156112a557600080fd5b8101908080519060200190929190505050101561132a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f464f433a20494e53554646494349454e545f544f4b454e315f42414c414e434581525060200191505060405180910390fd5b80600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e8c306040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b1580156113fe57600080fd5b505afa158015611412573d6000803e3d6000fd5b505050506040513d602081101561142857600080fd5b81019080805190602001909291905050501015611490576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180614cbc6027913960400191505060405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd8b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b15801561158f57600080fd5b505af11580156115a3573d6000803e3d6000fd5b505050506040513d60208110156115b957600080fd5b8101908080519060200190929190505050505b505b60008b11156119e65760006103e860058302816115e757fe5b04905060008111156119e45780600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a082318c6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561169357600080fd5b505afa1580156116a7573d6000803e3d6000fd5b505050506040513d60208110156116bd57600080fd5b81019080805190602001909291905050501015611742576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f464f433a20494e53554646494349454e545f544f4b454e315f42414c414e434581525060200191505060405180910390fd5b80600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e8c306040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b15801561181657600080fd5b505afa15801561182a573d6000803e3d6000fd5b505050506040513d602081101561184057600080fd5b810190808051906020019092919050505010156118a8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180614cbc6027913960400191505060405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd8b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b1580156119a757600080fd5b505af11580156119bb573d6000803e3d6000fd5b505050506040513d60208110156119d157600080fd5b8101908080519060200190929190505050505b505b600e60009054906101000a900460ff16156120545760008b1115611d27576000670de0b6b3a764000080860281611a1957fe5b04620f4240670de0b6b3a7640000606487020281611a3357fe5b0403905080600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16306040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b158015611b2d57600080fd5b505afa158015611b41573d6000803e3d6000fd5b505050506040513d6020811015611b5757600080fd5b81019080805190602001909291905050501015611bdc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f4e6f7420656e6f75676820616c6c6f77616e636520666f7220746f6b656e300081525060200191505060405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1630846040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015611cdb57600080fd5b505af1158015611cef573d6000803e3d6000fd5b505050506040513d6020811015611d0557600080fd5b810190808051906020019092919050505050611d25818601858989613fc0565b505b60008a111561204f576000620f4240612710606486020281611d4557fe5b04670de0b6b3a7640000612710870281611d5b57fe5b0403905080600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16306040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b158015611e5557600080fd5b505afa158015611e69573d6000803e3d6000fd5b505050506040513d6020811015611e7f57600080fd5b81019080805190602001909291905050501015611f04576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f4e6f7420656e6f75676820616c6c6f77616e636520666f7220746f6b656e310081525060200191505060405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1630846040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b15801561200357600080fd5b505af1158015612017573d6000803e3d6000fd5b505050506040513d602081101561202d57600080fd5b81019080805190602001909291905050505061204d858286018989613fc0565b505b6121af565b600061209061206d60198561433e90919063ffffffff16565b6120826127108861433e90919063ffffffff16565b6143d390919063ffffffff16565b905060006120ce6120ab60198561433e90919063ffffffff16565b6120c06127108861433e90919063ffffffff16565b6143d390919063ffffffff16565b90506121196305f5e10061210b896dffffffffffffffffffffffffffff168b6dffffffffffffffffffffffffffff1661433e90919063ffffffff16565b61433e90919063ffffffff16565b61212c828461433e90919063ffffffff16565b10156121a0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260068152602001807f464f433a204b000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6121ac86868a8a613fc0565b50505b8873ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d82284848f8f6040518085815260200184815260200183815260200182815260200194505050505060405180910390a35050505050506001600d819055505050505050565b6040518060400160405280600281526020017f4e6100000000000000000000000000000000000000000000000000000000000081525081565b6000806000600960009054906101000a90046dffffffffffffffffffffffffffff1692506009600e9054906101000a90046dffffffffffffffffffffffffffff1691506009601c9054906101000a900463ffffffff169050909192565b60006122e4338484614456565b6001905092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146123ba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180614d266022913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612440576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180614d486024913960400191505060405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60005481565b600f5481565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414612645576125c482600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546143d390919063ffffffff16565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b612650848484614541565b600190509392505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c960001b81565b601281565b60035481565b600e60009054906101000a900460ff1681565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612763576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f464f433a20464f5242494444454e00000000000000000000000000000000000081525060200191505060405180910390fd5b81600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b600a5481565b600b5481565b60006001600d541461286f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f464f433a204c4f434b454400000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000600d8190555060008061288261227a565b50915091506000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561292857600080fd5b505afa15801561293c573d6000803e3d6000fd5b505050506040513d602081101561295257600080fd5b810190808051906020019092919050505090506000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015612a0657600080fd5b505afa158015612a1a573d6000803e3d6000fd5b505050506040513d6020811015612a3057600080fd5b810190808051906020019092919050505090506000612a68856dffffffffffffffffffffffffffff16846143d390919063ffffffff16565b90506000612a8f856dffffffffffffffffffffffffffff16846143d390919063ffffffff16565b9050600e60009054906101000a900460ff1615612b3957670de0b6b3a764000080612ac5600f548561433e90919063ffffffff16565b81612acc57fe5b0481612ad457fe5b04620f42408281612ae157fe5b0414612b38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180614ce36021913960400191505060405180910390fd5b5b6000612b4587876146d5565b90506000805490506000811415612b9957612b856103e8612b77612b72868861433e90919063ffffffff16565b6148dc565b6143d390919063ffffffff16565b9850612b9460006103e861493e565b612bfc565b612bf9886dffffffffffffffffffffffffffff16612bc0838761433e90919063ffffffff16565b81612bc757fe5b04886dffffffffffffffffffffffffffff16612bec848761433e90919063ffffffff16565b81612bf357fe5b04614a58565b98505b60008911612c55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180614c9a6022913960400191505060405180910390fd5b612c5f8a8a61493e565b612c6b86868a8a613fc0565b8115612ce357612cdc6009600e9054906101000a90046dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff16600960009054906101000a90046dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff1661433e90919063ffffffff16565b600c819055505b3373ffffffffffffffffffffffffffffffffffffffff167f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f8585604051808381526020018281526020019250505060405180910390a250505050505050506001600d81905550919050565b60016020528060005260406000206000915090505481565b600c5481565b60046020528060005260406000206000915090505481565b6000806001600d5414612dff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f464f433a204c4f434b454400000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000600d81905550600080612e1261227a565b50915091506000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015612ee457600080fd5b505afa158015612ef8573d6000803e3d6000fd5b505050506040513d6020811015612f0e57600080fd5b8101908080519060200190929190505050905060008273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015612fa057600080fd5b505afa158015612fb4573d6000803e3d6000fd5b505050506040513d6020811015612fca57600080fd5b810190808051906020019092919050505090506000600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600061302d88886146d5565b905060008054905080613049868561433e90919063ffffffff16565b8161305057fe5b049a5080613067858561433e90919063ffffffff16565b8161306e57fe5b04995060008b118015613081575060008a115b6130d6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180614d046022913960400191505060405180910390fd5b6130e03084614a71565b6130eb878d8d613d73565b6130f6868d8c613d73565b8673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561317357600080fd5b505afa158015613187573d6000803e3d6000fd5b505050506040513d602081101561319d57600080fd5b810190808051906020019092919050505094508573ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561322d57600080fd5b505afa158015613241573d6000803e3d6000fd5b505050506040513d602081101561325757600080fd5b8101908080519060200190929190505050935061327685858b8b613fc0565b81156132ee576132e76009600e9054906101000a90046dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff16600960009054906101000a90046dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff1661433e90919063ffffffff16565b600c819055505b8b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d819364968d8d604051808381526020018281526020019250505060405180910390a35050505050505050506001600d81905550915091565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6040518060400160405280600281526020017f4e6100000000000000000000000000000000000000000000000000000000000081525081565b60006133dd338484614541565b6001905092915050565b6103e881565b6001600d5414613465576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f464f433a204c4f434b454400000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000600d819055506000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506135bb82846135b6600960009054906101000a90046dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561356d57600080fd5b505afa158015613581573d6000803e3d6000fd5b505050506040513d602081101561359757600080fd5b81019080805190602001909291905050506143d390919063ffffffff16565b613d73565b6136bb81846136b66009600e9054906101000a90046dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561366d57600080fd5b505afa158015613681573d6000803e3d6000fd5b505050506040513d602081101561369757600080fd5b81019080805190602001909291905050506143d390919063ffffffff16565b613d73565b50506001600d8190555050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b4284101561378a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f464f433a2045585049524544000000000000000000000000000000000000000081525060200191505060405180910390fd5b60006003547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c960001b898989600460008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190600101919050558a604051602001808781526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200184815260200183815260200182815260200196505050505050506040516020818303038152906040528051906020012060405160200180807f190100000000000000000000000000000000000000000000000000000000000081525060020183815260200182815260200192505050604051602081830303815290604052805190602001209050600060018286868660405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa15801561395c573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141580156139d057508873ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b613a42576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f464f433a20494e56414c49445f5349474e41545552450000000000000000000081525060200191505060405180910390fd5b613a4d898989614456565b505050505050505050565b6002602052816000526040600020602052806000526040600020600091509150505481565b68056bc75e2d63100000600f819055506001600e60006101000a81548160ff0219169083151502179055507fde21392bd41cd9d7014d5b10d91042318fe71fe34be9ab956184d22ac9cae14c60405160405180910390a1565b6000600e60006101000a81548160ff021916908315150217905550565b6001600d5414613b6b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f464f433a204c4f434b454400000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000600d81905550613d69600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015613c1557600080fd5b505afa158015613c29573d6000803e3d6000fd5b505050506040513d6020811015613c3f57600080fd5b8101908080519060200190929190505050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015613cef57600080fd5b505afa158015613d03573d6000803e3d6000fd5b505050506040513d6020811015613d1957600080fd5b8101908080519060200190929190505050600960009054906101000a90046dffffffffffffffffffffffffffff166009600e9054906101000a90046dffffffffffffffffffffffffffff16613fc0565b6001600d81905550565b600060608473ffffffffffffffffffffffffffffffffffffffff166040518060400160405280601981526020017f7472616e7366657228616464726573732c75696e743235362900000000000000815250805190602001208585604051602401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b60208310613ea05780518252602082019150602081019050602083039250613e7d565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613f02576040519150601f19603f3d011682016040523d82523d6000602084013e613f07565b606091505b5091509150818015613f475750600081511480613f465750808060200190516020811015613f3457600080fd5b81019080805190602001909291905050505b5b613fb9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f464f433a205452414e534645525f4641494c454400000000000000000000000081525060200191505060405180910390fd5b5050505050565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6dffffffffffffffffffffffffffff16841115801561403057507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6dffffffffffffffffffffffffffff168311155b6140a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f464f433a204f564552464c4f570000000000000000000000000000000000000081525060200191505060405180910390fd5b600064010000000042816140b257fe5b06905060006009601c9054906101000a900463ffffffff168203905060008163ffffffff161180156140f557506000846dffffffffffffffffffffffffffff1614155b801561411257506000836dffffffffffffffffffffffffffff1614155b156141f4578063ffffffff166141578561412b86614b8b565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16614bb690919063ffffffff16565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1602600a600082825401925050819055508063ffffffff166141c58461419987614b8b565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16614bb690919063ffffffff16565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1602600b600082825401925050819055505b85600960006101000a8154816dffffffffffffffffffffffffffff02191690836dffffffffffffffffffffffffffff160217905550846009600e6101000a8154816dffffffffffffffffffffffffffff02191690836dffffffffffffffffffffffffffff160217905550816009601c6101000a81548163ffffffff021916908363ffffffff1602179055507f1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1600960009054906101000a90046dffffffffffffffffffffffffffff166009600e9054906101000a90046dffffffffffffffffffffffffffff1660405180836dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff168152602001826dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff1681526020019250505060405180910390a1505050505050565b60008082148061435b575082828385029250828161435857fe5b04145b6143cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f64732d6d6174682d6d756c2d6f766572666c6f7700000000000000000000000081525060200191505060405180910390fd5b92915050565b6000828284039150811115614450576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f64732d6d6174682d7375622d756e646572666c6f77000000000000000000000081525060200191505060405180910390fd5b92915050565b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b61459381600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546143d390919063ffffffff16565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061462881600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614c1690919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663017e7e586040518163ffffffff1660e01b815260040160206040518083038186803b15801561474057600080fd5b505afa158015614754573d6000803e3d6000fd5b505050506040513d602081101561476a57600080fd5b81019080805190602001909291905050509050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141591506000600c54905082156148c257600081146148bd5760006148026147fd866dffffffffffffffffffffffffffff16886dffffffffffffffffffffffffffff1661433e90919063ffffffff16565b6148dc565b9050600061480f836148dc565b9050808211156148ba576000614855600861484761483685876143d390919063ffffffff16565b60005461433e90919063ffffffff16565b61433e90919063ffffffff16565b9050600061489261487060088561433e90919063ffffffff16565b61488460118761433e90919063ffffffff16565b614c1690919063ffffffff16565b9050600081838161489f57fe5b04905060008111156148b6576148b5878261493e565b5b5050505b50505b6148d4565b600081146148d3576000600c819055505b5b505092915050565b6000600382111561492b5781905060006001600284816148f857fe5b040190505b818110156149255780915060028182858161491457fe5b04018161491d57fe5b0490506148fd565b50614939565b6000821461493857600190505b5b919050565b61495381600054614c1690919063ffffffff16565b6000819055506149ab81600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614c1690919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b6000818310614a675781614a69565b825b905092915050565b614ac381600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546143d390919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614b1b816000546143d390919063ffffffff16565b600081905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b60006e010000000000000000000000000000826dffffffffffffffffffffffffffff16029050919050565b6000816dffffffffffffffffffffffffffff167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1681614c0d57fe5b04905092915050565b6000828284019150811015614c93576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f64732d6d6174682d6164642d6f766572666c6f7700000000000000000000000081525060200191505060405180910390fd5b9291505056fe464f433a20494e53554646494349454e545f4c49515549444954595f4d494e5445444e6f7420656e6f75676820616c6c6f77616e636520666f7220746f6b656e3120666f7220666565464f433a20494e434f52524543545f46495845445f50524943455f414d4f554e54464f433a20494e53554646494349454e545f4c49515549444954595f4255524e45444f6e6c7920746865206f776e65722063616e207365742061206e6577206f776e65724e6577206f776e65722063616e6e6f7420626520746865207a65726f2061646472657373a265627a7a72315820e6338abe47b44be972309edb48ee1642e99aa45886ff02389614d1378cb5b70864736f6c63430005100032454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429