60806040523480156200001157600080fd5b506040805160208101909152600081526200002c8162000033565b50620001b6565b6002620000418282620000ea565b5050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200007057607f821691505b6020821081036200009157634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620000e557600081815260208120601f850160051c81016020861015620000c05750805b601f850160051c820191505b81811015620000e157828155600101620000cc565b5050505b505050565b81516001600160401b0381111562000106576200010662000045565b6200011e816200011784546200005b565b8462000097565b602080601f8311600181146200015657600084156200013d5750858301515b600019600386901b1c1916600185901b178555620000e1565b600085815260208120601f198616915b82811015620001875788860151825594840194600190910190840162000166565b5085821015620001a65787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b611a7180620001c66000396000f3fe608060405234801561001057600080fd5b50600436106100a25760003560e01c80632eb2c2d611610076578063a22cb4651161005b578063a22cb46514610158578063e985e9c51461016b578063f242432a146101b457600080fd5b80632eb2c2d6146101255780634e1273f41461013857600080fd5b8062fdd58e146100a757806301ffc9a7146100cd5780630e89341c146100f0578063156e29f614610110575b600080fd5b6100ba6100b5366004611255565b6101c7565b6040519081526020015b60405180910390f35b6100e06100db3660046112b0565b61028d565b60405190151581526020016100c4565b6101036100fe3660046112d4565b610370565b6040516100c49190611333565b61012361011e366004611346565b610404565b005b6101236101333660046114de565b610424565b61014b610146366004611588565b6104d3565b6040516100c4919061168e565b6101236101663660046116a1565b610611565b6100e06101793660046116dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205460ff1690565b6101236101c2366004611710565b610620565b600073ffffffffffffffffffffffffffffffffffffffff83166102575760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a2061646472657373207a65726f206973206e6f742061207660448201527f616c6964206f776e65720000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b5060008181526020818152604080832073ffffffffffffffffffffffffffffffffffffffff861684529091529020545b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167fd9b67a2600000000000000000000000000000000000000000000000000000000148061032057507fffffffff0000000000000000000000000000000000000000000000000000000082167f0e89341c00000000000000000000000000000000000000000000000000000000145b8061028757507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614610287565b60606002805461037f90611775565b80601f01602080910402602001604051908101604052809291908181526020018280546103ab90611775565b80156103f85780601f106103cd576101008083540402835291602001916103f8565b820191906000526020600020905b8154815290600101906020018083116103db57829003601f168201915b50505050509050919050565b61041f838383604051806020016040528060008152506106c8565b505050565b73ffffffffffffffffffffffffffffffffffffffff851633148061044d575061044d8533610179565b6104bf5760405162461bcd60e51b815260206004820152602e60248201527f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60448201527f6572206f7220617070726f766564000000000000000000000000000000000000606482015260840161024e565b6104cc858585858561081f565b5050505050565b6060815183511461054c5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e67746860448201527f206d69736d617463680000000000000000000000000000000000000000000000606482015260840161024e565b6000835167ffffffffffffffff81111561056857610568611379565b604051908082528060200260200182016040528015610591578160200160208202803683370190505b50905060005b8451811015610609576105dc8582815181106105b5576105b56117c8565b60200260200101518583815181106105cf576105cf6117c8565b60200260200101516101c7565b8282815181106105ee576105ee6117c8565b602090810291909101015261060281611826565b9050610597565b509392505050565b61061c338383610b0b565b5050565b73ffffffffffffffffffffffffffffffffffffffff851633148061064957506106498533610179565b6106bb5760405162461bcd60e51b815260206004820152602e60248201527f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60448201527f6572206f7220617070726f766564000000000000000000000000000000000000606482015260840161024e565b6104cc8585858585610c44565b73ffffffffffffffffffffffffffffffffffffffff84166107515760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161024e565b33600061075d85610e4e565b9050600061076a85610e4e565b905060008681526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8b168452909152812080548792906107a990849061185e565b9091555050604080518781526020810187905273ffffffffffffffffffffffffffffffffffffffff808a1692600092918716917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a461081683600089898989610e99565b50505050505050565b81518351146108965760405162461bcd60e51b815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060448201527f6d69736d61746368000000000000000000000000000000000000000000000000606482015260840161024e565b73ffffffffffffffffffffffffffffffffffffffff841661091f5760405162461bcd60e51b815260206004820152602560248201527f455243313135353a207472616e7366657220746f20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161024e565b3360005b8451811015610a76576000858281518110610940576109406117c8565b60200260200101519050600085838151811061095e5761095e6117c8565b6020908102919091018101516000848152808352604080822073ffffffffffffffffffffffffffffffffffffffff8e168352909352919091205490915081811015610a115760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60448201527f72207472616e7366657200000000000000000000000000000000000000000000606482015260840161024e565b60008381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8e8116855292528083208585039055908b16825281208054849290610a5b90849061185e565b9250508190555050505080610a6f90611826565b9050610923565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051610aed929190611871565b60405180910390a4610b038187878787876110b7565b505050505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610bac5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c2073746174757360448201527f20666f722073656c660000000000000000000000000000000000000000000000606482015260840161024e565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8416610ccd5760405162461bcd60e51b815260206004820152602560248201527f455243313135353a207472616e7366657220746f20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161024e565b336000610cd985610e4e565b90506000610ce685610e4e565b905060008681526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8c16845290915290205485811015610d8c5760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60448201527f72207472616e7366657200000000000000000000000000000000000000000000606482015260840161024e565b60008781526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8d8116855292528083208985039055908a16825281208054889290610dd690849061185e565b9091555050604080518881526020810188905273ffffffffffffffffffffffffffffffffffffffff808b16928c821692918816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4610e43848a8a8a8a8a610e99565b505050505050505050565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110610e8857610e886117c8565b602090810291909101015292915050565b73ffffffffffffffffffffffffffffffffffffffff84163b15610b03576040517ff23a6e6100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85169063f23a6e6190610f10908990899088908890889060040161189f565b6020604051808303816000875af1925050508015610f4b575060408051601f3d908101601f19168201909252610f48918101906118ef565b60015b61100057610f5761190c565b806308c379a003610f905750610f6b611928565b80610f765750610f92565b8060405162461bcd60e51b815260040161024e9190611333565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e2d4552433131353560448201527f526563656976657220696d706c656d656e746572000000000000000000000000606482015260840161024e565b7fffffffff0000000000000000000000000000000000000000000000000000000081167ff23a6e6100000000000000000000000000000000000000000000000000000000146108165760405162461bcd60e51b815260206004820152602860248201527f455243313135353a204552433131353552656365697665722072656a6563746560448201527f6420746f6b656e73000000000000000000000000000000000000000000000000606482015260840161024e565b73ffffffffffffffffffffffffffffffffffffffff84163b15610b03576040517fbc197c8100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85169063bc197c819061112e90899089908890889088906004016119d0565b6020604051808303816000875af1925050508015611169575060408051601f3d908101601f19168201909252611166918101906118ef565b60015b61117557610f5761190c565b7fffffffff0000000000000000000000000000000000000000000000000000000081167fbc197c8100000000000000000000000000000000000000000000000000000000146108165760405162461bcd60e51b815260206004820152602860248201527f455243313135353a204552433131353552656365697665722072656a6563746560448201527f6420746f6b656e73000000000000000000000000000000000000000000000000606482015260840161024e565b803573ffffffffffffffffffffffffffffffffffffffff8116811461125057600080fd5b919050565b6000806040838503121561126857600080fd5b6112718361122c565b946020939093013593505050565b7fffffffff00000000000000000000000000000000000000000000000000000000811681146112ad57600080fd5b50565b6000602082840312156112c257600080fd5b81356112cd8161127f565b9392505050565b6000602082840312156112e657600080fd5b5035919050565b6000815180845260005b81811015611313576020818501810151868301820152016112f7565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006112cd60208301846112ed565b60008060006060848603121561135b57600080fd5b6113648461122c565b95602085013595506040909401359392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff821117156113ce576113ce611379565b6040525050565b600067ffffffffffffffff8211156113ef576113ef611379565b5060051b60200190565b600082601f83011261140a57600080fd5b81356020611417826113d5565b60405161142482826113a8565b83815260059390931b850182019282810191508684111561144457600080fd5b8286015b8481101561145f5780358352918301918301611448565b509695505050505050565b600082601f83011261147b57600080fd5b813567ffffffffffffffff81111561149557611495611379565b6040516114ac6020601f19601f85011601826113a8565b8181528460208386010111156114c157600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600060a086880312156114f657600080fd5b6114ff8661122c565b945061150d6020870161122c565b9350604086013567ffffffffffffffff8082111561152a57600080fd5b61153689838a016113f9565b9450606088013591508082111561154c57600080fd5b61155889838a016113f9565b9350608088013591508082111561156e57600080fd5b5061157b8882890161146a565b9150509295509295909350565b6000806040838503121561159b57600080fd5b823567ffffffffffffffff808211156115b357600080fd5b818501915085601f8301126115c757600080fd5b813560206115d4826113d5565b6040516115e182826113a8565b83815260059390931b850182019282810191508984111561160157600080fd5b948201945b83861015611626576116178661122c565b82529482019490820190611606565b9650508601359250508082111561163c57600080fd5b50611649858286016113f9565b9150509250929050565b600081518084526020808501945080840160005b8381101561168357815187529582019590820190600101611667565b509495945050505050565b6020815260006112cd6020830184611653565b600080604083850312156116b457600080fd5b6116bd8361122c565b9150602083013580151581146116d257600080fd5b809150509250929050565b600080604083850312156116f057600080fd5b6116f98361122c565b91506117076020840161122c565b90509250929050565b600080600080600060a0868803121561172857600080fd5b6117318661122c565b945061173f6020870161122c565b93506040860135925060608601359150608086013567ffffffffffffffff81111561176957600080fd5b61157b8882890161146a565b600181811c9082168061178957607f821691505b6020821081036117c2577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611857576118576117f7565b5060010190565b80820180821115610287576102876117f7565b6040815260006118846040830185611653565b82810360208401526118968185611653565b95945050505050565b600073ffffffffffffffffffffffffffffffffffffffff808816835280871660208401525084604083015283606083015260a060808301526118e460a08301846112ed565b979650505050505050565b60006020828403121561190157600080fd5b81516112cd8161127f565b600060033d11156119255760046000803e5060005160e01c5b90565b600060443d10156119365790565b6040517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc803d016004833e81513d67ffffffffffffffff816024840111818411171561198457505050505090565b828501915081518181111561199c5750505050505090565b843d87010160208285010111156119b65750505050505090565b6119c5602082860101876113a8565b509095945050505050565b600073ffffffffffffffffffffffffffffffffffffffff808816835280871660208401525060a06040830152611a0960a0830186611653565b8281036060840152611a1b8186611653565b90508281036080840152611a2f81856112ed565b9897505050505050505056fea2646970667358221220d31af5c70592153bc95a1180d3eeec999490bfde6042f9913602e593693db7ca64736f6c63430008130033