60806040526104e2600a556103e8600b556014600c5560405180602001604052806000815250600d908162000035919062000496565b50660aa87bee538000600e556002600f556000601060006101000a81548160ff0219169083151502179055503480156200006e57600080fd5b506040518060400160405280600981526020017f416e6e6162656c6c6500000000000000000000000000000000000000000000008152506040518060400160405280600981526020017f416e6e6162656c6c6500000000000000000000000000000000000000000000008152508160029081620000ec919062000496565b508060039081620000fe919062000496565b506200010f6200014560201b60201c565b6000819055505050620001376200012b6200014e60201b60201c565b6200015660201b60201c565b60016009819055506200057d565b60006001905090565b600033905090565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200029e57607f821691505b602082108103620002b457620002b362000256565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026200031e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620002df565b6200032a8683620002df565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000377620003716200036b8462000342565b6200034c565b62000342565b9050919050565b6000819050919050565b620003938362000356565b620003ab620003a2826200037e565b848454620002ec565b825550505050565b600090565b620003c2620003b3565b620003cf81848462000388565b505050565b5b81811015620003f757620003eb600082620003b8565b600181019050620003d5565b5050565b601f82111562000446576200041081620002ba565b6200041b84620002cf565b810160208510156200042b578190505b620004436200043a85620002cf565b830182620003d4565b50505b505050565b600082821c905092915050565b60006200046b600019846008026200044b565b1980831691505092915050565b600062000486838362000458565b9150826002028217905092915050565b620004a1826200021c565b67ffffffffffffffff811115620004bd57620004bc62000227565b5b620004c9825462000285565b620004d6828285620003fb565b600060209050601f8311600181146200050e5760008415620004f9578287015190505b62000505858262000478565b86555062000575565b601f1984166200051e86620002ba565b60005b82811015620005485784890151825560018201915060208501945060208101905062000521565b8683101562000568578489015162000564601f89168262000458565b8355505b6001600288020188555050505b505050505050565b6144f6806200058d6000396000f3fe6080604052600436106102255760003560e01c80638462151c11610123578063a22cb465116100ab578063d547cfb71161006f578063d547cfb71461081c578063e19979f514610847578063e985e9c514610870578063f2fde38b146108ad578063f43a22dc146108d657610225565b8063a22cb46514610713578063b88d4fde1461073c578063c23dc68f14610765578063c87b56dd146107a2578063d0fc579d146107df57610225565b806395d89b41116100f257806395d89b411461063b57806398710d1e1461066657806399a2557a146106915780639e9fcffc146106ce578063a0712d68146106f757610225565b80638462151c1461057f5780638d859f3e146105bc5780638da5cb5b146105e757806391b7f5ed1461061257610225565b806332cb6b0c116101b15780635bbb2177116101755780635bbb2177146104885780635c40f6f4146104c55780636352211e146104ee57806370a082311461052b578063715018a61461056857610225565b806332cb6b0c146103cb5780633ccfd60b146103f657806342842e0e1461040d578063484b973c1461043657806355f804b31461045f57610225565b8063095ea7b3116101f8578063095ea7b3146102fa5780630c23bb3f1461032357806318160ddd1461034c578063200d2ed21461037757806323b872dd146103a257610225565b806301ffc9a71461022a57806302ddb65b1461026757806306fdde0314610292578063081812fc146102bd575b600080fd5b34801561023657600080fd5b50610251600480360381019061024c9190612fcf565b610901565b60405161025e9190613017565b60405180910390f35b34801561027357600080fd5b5061027c6109e3565b604051610289919061304b565b60405180910390f35b34801561029e57600080fd5b506102a76109e9565b6040516102b491906130f6565b60405180910390f35b3480156102c957600080fd5b506102e460048036038101906102df9190613144565b610a7b565b6040516102f191906131b2565b60405180910390f35b34801561030657600080fd5b50610321600480360381019061031c91906131f9565b610af7565b005b34801561032f57600080fd5b5061034a60048036038101906103459190613144565b610c01565b005b34801561035857600080fd5b50610361610c13565b60405161036e919061304b565b60405180910390f35b34801561038357600080fd5b5061038c610c2a565b6040516103999190613017565b60405180910390f35b3480156103ae57600080fd5b506103c960048036038101906103c49190613239565b610c3d565b005b3480156103d757600080fd5b506103e0610c4d565b6040516103ed919061304b565b60405180910390f35b34801561040257600080fd5b5061040b610c53565b005b34801561041957600080fd5b50610434600480360381019061042f9190613239565b610d30565b005b34801561044257600080fd5b5061045d600480360381019061045891906131f9565b610d50565b005b34801561046b57600080fd5b50610486600480360381019061048191906133c1565b610dbd565b005b34801561049457600080fd5b506104af60048036038101906104aa91906134d2565b610dd8565b6040516104bc919061364d565b60405180910390f35b3480156104d157600080fd5b506104ec60048036038101906104e7919061369b565b610e99565b005b3480156104fa57600080fd5b5061051560048036038101906105109190613144565b610ebe565b60405161052291906131b2565b60405180910390f35b34801561053757600080fd5b50610552600480360381019061054d91906136c8565b610ed4565b60405161055f919061304b565b60405180910390f35b34801561057457600080fd5b5061057d610fa3565b005b34801561058b57600080fd5b506105a660048036038101906105a191906136c8565b610fb7565b6040516105b391906137b3565b60405180910390f35b3480156105c857600080fd5b506105d16111b2565b6040516105de919061304b565b60405180910390f35b3480156105f357600080fd5b506105fc6111b8565b60405161060991906131b2565b60405180910390f35b34801561061e57600080fd5b5061063960048036038101906106349190613144565b6111e2565b005b34801561064757600080fd5b506106506111f4565b60405161065d91906130f6565b60405180910390f35b34801561067257600080fd5b5061067b611286565b604051610688919061304b565b60405180910390f35b34801561069d57600080fd5b506106b860048036038101906106b391906137d5565b61128c565b6040516106c591906137b3565b60405180910390f35b3480156106da57600080fd5b506106f560048036038101906106f09190613144565b61154b565b005b610711600480360381019061070c9190613144565b61155d565b005b34801561071f57600080fd5b5061073a60048036038101906107359190613828565b611798565b005b34801561074857600080fd5b50610763600480360381019061075e9190613909565b61190f565b005b34801561077157600080fd5b5061078c60048036038101906107879190613144565b61198b565b60405161079991906139ce565b60405180910390f35b3480156107ae57600080fd5b506107c960048036038101906107c49190613144565b611aa8565b6040516107d691906130f6565b60405180910390f35b3480156107eb57600080fd5b50610806600480360381019061080191906136c8565b611bcb565b604051610813919061304b565b60405180910390f35b34801561082857600080fd5b50610831611be3565b60405161083e91906130f6565b60405180910390f35b34801561085357600080fd5b5061086e60048036038101906108699190613144565b611c71565b005b34801561087c57600080fd5b50610897600480360381019061089291906139e9565b611c83565b6040516108a49190613017565b60405180910390f35b3480156108b957600080fd5b506108d460048036038101906108cf91906136c8565b611d17565b005b3480156108e257600080fd5b506108eb611d9a565b6040516108f8919061304b565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109cc57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109dc57506109db82611da0565b5b9050919050565b600b5481565b6060600280546109f890613a58565b80601f0160208091040260200160405190810160405280929190818152602001828054610a2490613a58565b8015610a715780601f10610a4657610100808354040283529160200191610a71565b820191906000526020600020905b815481529060010190602001808311610a5457829003601f168201915b5050505050905090565b6000610a8682611e0a565b610abc576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b0282610ebe565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610b69576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b88611e58565b73ffffffffffffffffffffffffffffffffffffffff1614158015610bba5750610bb881610bb3611e58565b611c83565b155b15610bf1576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610bfc838383611e60565b505050565b610c09611f12565b80600b8190555050565b6000610c1d611f90565b6001546000540303905090565b601060009054906101000a900460ff1681565b610c48838383611f99565b505050565b600a5481565b610c5b611f12565b600260095403610ca0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9790613ad5565b60405180910390fd5b60026009819055506000610cb26111b8565b73ffffffffffffffffffffffffffffffffffffffff1647604051610cd590613b26565b60006040518083038185875af1925050503d8060008114610d12576040519150601f19603f3d011682016040523d82523d6000602084013e610d17565b606091505b5050905080610d2557600080fd5b506001600981905550565b610d4b8383836040518060200160405280600081525061190f565b505050565b610d58611f12565b600a5481610d6461244d565b610d6e9190613b6a565b1115610daf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da690613bea565b60405180910390fd5b610db98282612460565b5050565b610dc5611f12565b80600d9081610dd49190613db6565b5050565b606060008251905060008167ffffffffffffffff811115610dfc57610dfb613296565b5b604051908082528060200260200182016040528015610e3557816020015b610e22612f20565b815260200190600190039081610e1a5790505b50905060005b828114610e8e57610e65858281518110610e5857610e57613e88565b5b602002602001015161198b565b828281518110610e7857610e77613e88565b5b6020026020010181905250806001019050610e3b565b508092505050919050565b610ea1611f12565b80601060006101000a81548160ff02191690831515021790555050565b6000610ec98261247e565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610f3b576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b610fab611f12565b610fb5600061270d565b565b60606000806000610fc785610ed4565b905060008167ffffffffffffffff811115610fe557610fe4613296565b5b6040519080825280602002602001820160405280156110135781602001602082028036833780820191505090505b50905061101e612f20565b6000611028611f90565b90505b8386146111a457600460008281526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509150816040015161119957600073ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff161461113e57816000015194505b8773ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603611198578083878060010198508151811061118b5761118a613e88565b5b6020026020010181815250505b5b80600101905061102b565b508195505050505050919050565b600e5481565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6111ea611f12565b80600e8190555050565b60606003805461120390613a58565b80601f016020809104026020016040519081016040528092919081815260200182805461122f90613a58565b801561127c5780601f106112515761010080835404028352916020019161127c565b820191906000526020600020905b81548152906001019060200180831161125f57829003601f168201915b5050505050905090565b600f5481565b60608183106112c7576040517f32c1995a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060005490506112d7611f90565b8510156112e9576112e6611f90565b94505b808411156112f5578093505b600061130087610ed4565b90508486101561132357600086860390508181101561131d578091505b50611328565b600090505b60008167ffffffffffffffff81111561134457611343613296565b5b6040519080825280602002602001820160405280156113725781602001602082028036833780820191505090505b509050600082036113895780945050505050611544565b60006113948861198b565b9050600081604001516113a957816000015190505b60008990505b8881141580156113bf5750848714155b1561153657600460008281526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509250826040015161152b57600073ffffffffffffffffffffffffffffffffffffffff16836000015173ffffffffffffffffffffffffffffffffffffffff16146114d057826000015191505b8a73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361152a578084888060010199508151811061151d5761151c613e88565b5b6020026020010181815250505b5b8060010190506113af565b508583528296505050505050505b9392505050565b611553611f12565b80600c8190555050565b600c548111156115a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159990613f29565b60405180910390fd5b600a54816115ae61244d565b6115b89190613b6a565b11156115f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f090613bea565b60405180910390fd5b601060009054906101000a900460ff16611648576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163f90613f95565b60405180910390fd5b60008190506000601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600f54811080156116aa5750600b546116a861244d565b105b156116e357600081600f546116bf9190613fb5565b9050808411156116dc5780846116d59190613fb5565b92506116e1565b600092505b505b600e54826116f19190613fe9565b341015611733576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172a9061409d565b60405180910390fd5b82601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546117829190613b6a565b925050819055506117933384612460565b505050565b6117a0611e58565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611804576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060076000611811611e58565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166118be611e58565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516119039190613017565b60405180910390a35050565b61191a848484611f99565b6119398373ffffffffffffffffffffffffffffffffffffffff166127d3565b801561194e575061194c848484846127f6565b155b15611985576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b611993612f20565b61199b612f20565b6119a3611f90565b8310806119b257506000548310155b156119c05780915050611aa3565b600460008481526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050806040015115611a965780915050611aa3565b611a9f8361247e565b9150505b919050565b6060611ab382611e0a565b611af2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae99061412f565b60405180910390fd5b6000611afc612946565b5111611b9257600d8054611b0f90613a58565b80601f0160208091040260200160405190810160405280929190818152602001828054611b3b90613a58565b8015611b885780601f10611b5d57610100808354040283529160200191611b88565b820191906000526020600020905b815481529060010190602001808311611b6b57829003601f168201915b5050505050611bc4565b611b9a612946565b611ba3836129d8565b604051602001611bb49291906141d7565b6040516020818303038152906040525b9050919050565b60116020528060005260406000206000915090505481565b600d8054611bf090613a58565b80601f0160208091040260200160405190810160405280929190818152602001828054611c1c90613a58565b8015611c695780601f10611c3e57610100808354040283529160200191611c69565b820191906000526020600020905b815481529060010190602001808311611c4c57829003601f168201915b505050505081565b611c79611f12565b80600f8190555050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611d1f611f12565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611d8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8590614278565b60405180910390fd5b611d978161270d565b50565b600c5481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600081611e15611f90565b11158015611e24575060005482105b8015611e51575060046000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b611f1a611e58565b73ffffffffffffffffffffffffffffffffffffffff16611f386111b8565b73ffffffffffffffffffffffffffffffffffffffff1614611f8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f85906142e4565b60405180910390fd5b565b60006001905090565b6000611fa48261247e565b90508373ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461200f576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff16612030611e58565b73ffffffffffffffffffffffffffffffffffffffff16148061205f575061205e85612059611e58565b611c83565b5b806120a4575061206d611e58565b73ffffffffffffffffffffffffffffffffffffffff1661208c84610a7b565b73ffffffffffffffffffffffffffffffffffffffff16145b9050806120dd576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612143576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6121508585856001612b38565b61215c60008487611e60565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600460008581526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060006001850190506000600460008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036123db5760005482146123da57878160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b505050828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46124468585856001612b3e565b5050505050565b6000612457611f90565b60005403905090565b61247a828260405180602001604052806000815250612b44565b5050565b612486612f20565b600082905080612494611f90565b111580156124a3575060005481105b156126d6576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff161515151581525050905080604001516126d457600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146125b8578092505050612708565b5b6001156126d357818060019003925050600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146126ce578092505050612708565b6125b9565b5b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261281c611e58565b8786866040518563ffffffff1660e01b815260040161283e9493929190614359565b6020604051808303816000875af192505050801561287a57506040513d601f19601f8201168201806040525081019061287791906143ba565b60015b6128f3573d80600081146128aa576040519150601f19603f3d011682016040523d82523d6000602084013e6128af565b606091505b5060008151036128eb576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b6060600d805461295590613a58565b80601f016020809104026020016040519081016040528092919081815260200182805461298190613a58565b80156129ce5780601f106129a3576101008083540402835291602001916129ce565b820191906000526020600020905b8154815290600101906020018083116129b157829003601f168201915b5050505050905090565b606060008203612a1f576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612b33565b600082905060005b60008214612a51578080612a3a906143e7565b915050600a82612a4a919061445e565b9150612a27565b60008167ffffffffffffffff811115612a6d57612a6c613296565b5b6040519080825280601f01601f191660200182016040528015612a9f5781602001600182028036833780820191505090505b5090505b60008514612b2c57600182612ab89190613fb5565b9150600a85612ac7919061448f565b6030612ad39190613b6a565b60f81b818381518110612ae957612ae8613e88565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612b25919061445e565b9450612aa3565b8093505050505b919050565b50505050565b50505050565b612b518383836001612b56565b505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603612bc2576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008403612bfc576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612c096000868387612b38565b83600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550846004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060008582019050838015612dd35750612dd28773ffffffffffffffffffffffffffffffffffffffff166127d3565b5b15612e98575b818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612e4860008884806001019550886127f6565b612e7e576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b808203612dd9578260005414612e9357600080fd5b612f03565b5b818060010192508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4808203612e99575b816000819055505050612f196000868387612b3e565b5050505050565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612fac81612f77565b8114612fb757600080fd5b50565b600081359050612fc981612fa3565b92915050565b600060208284031215612fe557612fe4612f6d565b5b6000612ff384828501612fba565b91505092915050565b60008115159050919050565b61301181612ffc565b82525050565b600060208201905061302c6000830184613008565b92915050565b6000819050919050565b61304581613032565b82525050565b6000602082019050613060600083018461303c565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156130a0578082015181840152602081019050613085565b60008484015250505050565b6000601f19601f8301169050919050565b60006130c882613066565b6130d28185613071565b93506130e2818560208601613082565b6130eb816130ac565b840191505092915050565b6000602082019050818103600083015261311081846130bd565b905092915050565b61312181613032565b811461312c57600080fd5b50565b60008135905061313e81613118565b92915050565b60006020828403121561315a57613159612f6d565b5b60006131688482850161312f565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061319c82613171565b9050919050565b6131ac81613191565b82525050565b60006020820190506131c760008301846131a3565b92915050565b6131d681613191565b81146131e157600080fd5b50565b6000813590506131f3816131cd565b92915050565b600080604083850312156132105761320f612f6d565b5b600061321e858286016131e4565b925050602061322f8582860161312f565b9150509250929050565b60008060006060848603121561325257613251612f6d565b5b6000613260868287016131e4565b9350506020613271868287016131e4565b92505060406132828682870161312f565b9150509250925092565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6132ce826130ac565b810181811067ffffffffffffffff821117156132ed576132ec613296565b5b80604052505050565b6000613300612f63565b905061330c82826132c5565b919050565b600067ffffffffffffffff82111561332c5761332b613296565b5b613335826130ac565b9050602081019050919050565b82818337600083830152505050565b600061336461335f84613311565b6132f6565b9050828152602081018484840111156133805761337f613291565b5b61338b848285613342565b509392505050565b600082601f8301126133a8576133a761328c565b5b81356133b8848260208601613351565b91505092915050565b6000602082840312156133d7576133d6612f6d565b5b600082013567ffffffffffffffff8111156133f5576133f4612f72565b5b61340184828501613393565b91505092915050565b600067ffffffffffffffff82111561342557613424613296565b5b602082029050602081019050919050565b600080fd5b600061344e6134498461340a565b6132f6565b9050808382526020820190506020840283018581111561347157613470613436565b5b835b8181101561349a5780613486888261312f565b845260208401935050602081019050613473565b5050509392505050565b600082601f8301126134b9576134b861328c565b5b81356134c984826020860161343b565b91505092915050565b6000602082840312156134e8576134e7612f6d565b5b600082013567ffffffffffffffff81111561350657613505612f72565b5b613512848285016134a4565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61355081613191565b82525050565b600067ffffffffffffffff82169050919050565b61357381613556565b82525050565b61358281612ffc565b82525050565b60608201600082015161359e6000850182613547565b5060208201516135b1602085018261356a565b5060408201516135c46040850182613579565b50505050565b60006135d68383613588565b60608301905092915050565b6000602082019050919050565b60006135fa8261351b565b6136048185613526565b935061360f83613537565b8060005b8381101561364057815161362788826135ca565b9750613632836135e2565b925050600181019050613613565b5085935050505092915050565b6000602082019050818103600083015261366781846135ef565b905092915050565b61367881612ffc565b811461368357600080fd5b50565b6000813590506136958161366f565b92915050565b6000602082840312156136b1576136b0612f6d565b5b60006136bf84828501613686565b91505092915050565b6000602082840312156136de576136dd612f6d565b5b60006136ec848285016131e4565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61372a81613032565b82525050565b600061373c8383613721565b60208301905092915050565b6000602082019050919050565b6000613760826136f5565b61376a8185613700565b935061377583613711565b8060005b838110156137a657815161378d8882613730565b975061379883613748565b925050600181019050613779565b5085935050505092915050565b600060208201905081810360008301526137cd8184613755565b905092915050565b6000806000606084860312156137ee576137ed612f6d565b5b60006137fc868287016131e4565b935050602061380d8682870161312f565b925050604061381e8682870161312f565b9150509250925092565b6000806040838503121561383f5761383e612f6d565b5b600061384d858286016131e4565b925050602061385e85828601613686565b9150509250929050565b600067ffffffffffffffff82111561388357613882613296565b5b61388c826130ac565b9050602081019050919050565b60006138ac6138a784613868565b6132f6565b9050828152602081018484840111156138c8576138c7613291565b5b6138d3848285613342565b509392505050565b600082601f8301126138f0576138ef61328c565b5b8135613900848260208601613899565b91505092915050565b6000806000806080858703121561392357613922612f6d565b5b6000613931878288016131e4565b9450506020613942878288016131e4565b93505060406139538782880161312f565b925050606085013567ffffffffffffffff81111561397457613973612f72565b5b613980878288016138db565b91505092959194509250565b6060820160008201516139a26000850182613547565b5060208201516139b5602085018261356a565b5060408201516139c86040850182613579565b50505050565b60006060820190506139e3600083018461398c565b92915050565b60008060408385031215613a00576139ff612f6d565b5b6000613a0e858286016131e4565b9250506020613a1f858286016131e4565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613a7057607f821691505b602082108103613a8357613a82613a29565b5b50919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000613abf601f83613071565b9150613aca82613a89565b602082019050919050565b60006020820190508181036000830152613aee81613ab2565b9050919050565b600081905092915050565b50565b6000613b10600083613af5565b9150613b1b82613b00565b600082019050919050565b6000613b3182613b03565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613b7582613032565b9150613b8083613032565b9250828201905080821115613b9857613b97613b3b565b5b92915050565b7f45786365656473206d617820737570706c790000000000000000000000000000600082015250565b6000613bd4601283613071565b9150613bdf82613b9e565b602082019050919050565b60006020820190508181036000830152613c0381613bc7565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302613c6c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613c2f565b613c768683613c2f565b95508019841693508086168417925050509392505050565b6000819050919050565b6000613cb3613cae613ca984613032565b613c8e565b613032565b9050919050565b6000819050919050565b613ccd83613c98565b613ce1613cd982613cba565b848454613c3c565b825550505050565b600090565b613cf6613ce9565b613d01818484613cc4565b505050565b5b81811015613d2557613d1a600082613cee565b600181019050613d07565b5050565b601f821115613d6a57613d3b81613c0a565b613d4484613c1f565b81016020851015613d53578190505b613d67613d5f85613c1f565b830182613d06565b50505b505050565b600082821c905092915050565b6000613d8d60001984600802613d6f565b1980831691505092915050565b6000613da68383613d7c565b9150826002028217905092915050565b613dbf82613066565b67ffffffffffffffff811115613dd857613dd7613296565b5b613de28254613a58565b613ded828285613d29565b600060209050601f831160018114613e205760008415613e0e578287015190505b613e188582613d9a565b865550613e80565b601f198416613e2e86613c0a565b60005b82811015613e5657848901518255600182019150602085019450602081019050613e31565b86831015613e735784890151613e6f601f891682613d7c565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f45786365656473204e465420706572207472616e73616374696f6e206c696d6960008201527f7400000000000000000000000000000000000000000000000000000000000000602082015250565b6000613f13602183613071565b9150613f1e82613eb7565b604082019050919050565b60006020820190508181036000830152613f4281613f06565b9050919050565b7f4d696e74696e67206973206e6f74206c697665207965742e0000000000000000600082015250565b6000613f7f601883613071565b9150613f8a82613f49565b602082019050919050565b60006020820190508181036000830152613fae81613f72565b9050919050565b6000613fc082613032565b9150613fcb83613032565b9250828203905081811115613fe357613fe2613b3b565b5b92915050565b6000613ff482613032565b9150613fff83613032565b925082820261400d81613032565b9150828204841483151761402457614023613b3b565b5b5092915050565b7f45746865722076616c75652073656e74206973206e6f7420737566666963696560008201527f6e74000000000000000000000000000000000000000000000000000000000000602082015250565b6000614087602283613071565b91506140928261402b565b604082019050919050565b600060208201905081810360008301526140b68161407a565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000614119602f83613071565b9150614124826140bd565b604082019050919050565b600060208201905081810360008301526141488161410c565b9050919050565b600081905092915050565b600061416582613066565b61416f818561414f565b935061417f818560208601613082565b80840191505092915050565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b60006141c160058361414f565b91506141cc8261418b565b600582019050919050565b60006141e3828561415a565b91506141ef828461415a565b91506141fa826141b4565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614262602683613071565b915061426d82614206565b604082019050919050565b6000602082019050818103600083015261429181614255565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006142ce602083613071565b91506142d982614298565b602082019050919050565b600060208201905081810360008301526142fd816142c1565b9050919050565b600081519050919050565b600082825260208201905092915050565b600061432b82614304565b614335818561430f565b9350614345818560208601613082565b61434e816130ac565b840191505092915050565b600060808201905061436e60008301876131a3565b61437b60208301866131a3565b614388604083018561303c565b818103606083015261439a8184614320565b905095945050505050565b6000815190506143b481612fa3565b92915050565b6000602082840312156143d0576143cf612f6d565b5b60006143de848285016143a5565b91505092915050565b60006143f282613032565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361442457614423613b3b565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061446982613032565b915061447483613032565b9250826144845761448361442f565b5b828204905092915050565b600061449a82613032565b91506144a583613032565b9250826144b5576144b461442f565b5b82820690509291505056fea26469706673582212207b029a16aa6429dcc96a06b5a963660334ac184bc0f50bc4ea649e6c1bd8578664736f6c63430008110033