6080604052610235600a556000600b55600a600c5560405180602001604052806000815250600d908162000034919062000495565b5066071afd498d0000600e556001600f556000601060006101000a81548160ff0219169083151502179055503480156200006d57600080fd5b506040518060400160405280600881526020017f4d6f6f6e4b6964730000000000000000000000000000000000000000000000008152506040518060400160405280600881526020017f4d4f4f4e4b4944530000000000000000000000000000000000000000000000008152508160029081620000eb919062000495565b508060039081620000fd919062000495565b506200010e6200014460201b60201c565b6000819055505050620001366200012a6200014d60201b60201c565b6200015560201b60201c565b60016009819055506200057c565b60006001905090565b600033905090565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200029d57607f821691505b602082108103620002b357620002b262000255565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026200031d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620002de565b620003298683620002de565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000376620003706200036a8462000341565b6200034b565b62000341565b9050919050565b6000819050919050565b620003928362000355565b620003aa620003a1826200037d565b848454620002eb565b825550505050565b600090565b620003c1620003b2565b620003ce81848462000387565b505050565b5b81811015620003f657620003ea600082620003b7565b600181019050620003d4565b5050565b601f82111562000445576200040f81620002b9565b6200041a84620002ce565b810160208510156200042a578190505b620004426200043985620002ce565b830182620003d3565b50505b505050565b600082821c905092915050565b60006200046a600019846008026200044a565b1980831691505092915050565b600062000485838362000457565b9150826002028217905092915050565b620004a0826200021b565b67ffffffffffffffff811115620004bc57620004bb62000226565b5b620004c8825462000284565b620004d5828285620003fa565b600060209050601f8311600181146200050d5760008415620004f8578287015190505b62000504858262000477565b86555062000574565b601f1984166200051d86620002b9565b60005b82811015620005475784890151825560018201915060208501945060208101905062000520565b8683101562000567578489015162000563601f89168262000457565b8355505b6001600288020188555050505b505050505050565b6144f6806200058c6000396000f3fe6080604052600436106102255760003560e01c8063715e6e5811610123578063a22cb465116100ab578063d547cfb71161006f578063d547cfb71461081c578063e19979f514610847578063e985e9c514610870578063f2fde38b146108ad578063f43a22dc146108d657610225565b8063a22cb46514610713578063b88d4fde1461073c578063c23dc68f14610765578063c87b56dd146107a2578063d0fc579d146107df57610225565b806391b7f5ed116100f257806391b7f5ed1461062e57806395d89b411461065757806398710d1e1461068257806399a2557a146106ad5780639e9fcffc146106ea57610225565b8063715e6e581461057f5780638462151c1461059b5780638d859f3e146105d85780638da5cb5b1461060357610225565b806332cb6b0c116101b15780635bbb2177116101755780635bbb2177146104885780635c40f6f4146104c55780636352211e146104ee57806370a082311461052b578063715018a61461056857610225565b806332cb6b0c146103cb5780633ccfd60b146103f657806342842e0e1461040d578063484b973c1461043657806355f804b31461045f57610225565b8063095ea7b3116101f8578063095ea7b3146102fa5780630c23bb3f1461032357806318160ddd1461034c578063200d2ed21461037757806323b872dd146103a257610225565b806301ffc9a71461022a57806302ddb65b1461026757806306fdde0314610292578063081812fc146102bd575b600080fd5b34801561023657600080fd5b50610251600480360381019061024c9190612fcf565b610901565b60405161025e9190613017565b60405180910390f35b34801561027357600080fd5b5061027c6109e3565b604051610289919061304b565b60405180910390f35b34801561029e57600080fd5b506102a76109e9565b6040516102b491906130f6565b60405180910390f35b3480156102c957600080fd5b506102e460048036038101906102df9190613144565b610a7b565b6040516102f191906131b2565b60405180910390f35b34801561030657600080fd5b50610321600480360381019061031c91906131f9565b610af7565b005b34801561032f57600080fd5b5061034a60048036038101906103459190613144565b610c01565b005b34801561035857600080fd5b50610361610c13565b60405161036e919061304b565b60405180910390f35b34801561038357600080fd5b5061038c610c2a565b6040516103999190613017565b60405180910390f35b3480156103ae57600080fd5b506103c960048036038101906103c49190613239565b610c3d565b005b3480156103d757600080fd5b506103e0610c4d565b6040516103ed919061304b565b60405180910390f35b34801561040257600080fd5b5061040b610c53565b005b34801561041957600080fd5b50610434600480360381019061042f9190613239565b610d30565b005b34801561044257600080fd5b5061045d600480360381019061045891906131f9565b610d50565b005b34801561046b57600080fd5b50610486600480360381019061048191906133c1565b610dbd565b005b34801561049457600080fd5b506104af60048036038101906104aa91906134d2565b610dd8565b6040516104bc919061364d565b60405180910390f35b3480156104d157600080fd5b506104ec60048036038101906104e7919061369b565b610e99565b005b3480156104fa57600080fd5b5061051560048036038101906105109190613144565b610ebe565b60405161052291906131b2565b60405180910390f35b34801561053757600080fd5b50610552600480360381019061054d91906136c8565b610ed4565b60405161055f919061304b565b60405180910390f35b34801561057457600080fd5b5061057d610fa3565b005b61059960048036038101906105949190613144565b610fb7565b005b3480156105a757600080fd5b506105c260048036038101906105bd91906136c8565b6111f2565b6040516105cf91906137b3565b60405180910390f35b3480156105e457600080fd5b506105ed6113ed565b6040516105fa919061304b565b60405180910390f35b34801561060f57600080fd5b506106186113f3565b60405161062591906131b2565b60405180910390f35b34801561063a57600080fd5b5061065560048036038101906106509190613144565b61141d565b005b34801561066357600080fd5b5061066c61142f565b60405161067991906130f6565b60405180910390f35b34801561068e57600080fd5b506106976114c1565b6040516106a4919061304b565b60405180910390f35b3480156106b957600080fd5b506106d460048036038101906106cf91906137d5565b6114c7565b6040516106e191906137b3565b60405180910390f35b3480156106f657600080fd5b50610711600480360381019061070c9190613144565b611786565b005b34801561071f57600080fd5b5061073a60048036038101906107359190613828565b611798565b005b34801561074857600080fd5b50610763600480360381019061075e9190613909565b61190f565b005b34801561077157600080fd5b5061078c60048036038101906107879190613144565b61198b565b60405161079991906139ce565b60405180910390f35b3480156107ae57600080fd5b506107c960048036038101906107c49190613144565b611aa8565b6040516107d691906130f6565b60405180910390f35b3480156107eb57600080fd5b50610806600480360381019061080191906136c8565b611bcb565b604051610813919061304b565b60405180910390f35b34801561082857600080fd5b50610831611be3565b60405161083e91906130f6565b60405180910390f35b34801561085357600080fd5b5061086e60048036038101906108699190613144565b611c71565b005b34801561087c57600080fd5b50610897600480360381019061089291906139e9565b611c83565b6040516108a49190613017565b60405180910390f35b3480156108b957600080fd5b506108d460048036038101906108cf91906136c8565b611d17565b005b3480156108e257600080fd5b506108eb611d9a565b6040516108f8919061304b565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109cc57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109dc57506109db82611da0565b5b9050919050565b600b5481565b6060600280546109f890613a58565b80601f0160208091040260200160405190810160405280929190818152602001828054610a2490613a58565b8015610a715780601f10610a4657610100808354040283529160200191610a71565b820191906000526020600020905b815481529060010190602001808311610a5457829003601f168201915b5050505050905090565b6000610a8682611e0a565b610abc576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b0282610ebe565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610b69576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b88611e58565b73ffffffffffffffffffffffffffffffffffffffff1614158015610bba5750610bb881610bb3611e58565b611c83565b155b15610bf1576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610bfc838383611e60565b505050565b610c09611f12565b80600b8190555050565b6000610c1d611f90565b6001546000540303905090565b601060009054906101000a900460ff1681565b610c48838383611f99565b505050565b600a5481565b610c5b611f12565b600260095403610ca0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9790613ad5565b60405180910390fd5b60026009819055506000610cb26113f3565b73ffffffffffffffffffffffffffffffffffffffff1647604051610cd590613b26565b60006040518083038185875af1925050503d8060008114610d12576040519150601f19603f3d011682016040523d82523d6000602084013e610d17565b606091505b5050905080610d2557600080fd5b506001600981905550565b610d4b8383836040518060200160405280600081525061190f565b505050565b610d58611f12565b600a5481610d6461244d565b610d6e9190613b6a565b1115610daf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da690613bea565b60405180910390fd5b610db98282612460565b5050565b610dc5611f12565b80600d9081610dd49190613db6565b5050565b606060008251905060008167ffffffffffffffff811115610dfc57610dfb613296565b5b604051908082528060200260200182016040528015610e3557816020015b610e22612f20565b815260200190600190039081610e1a5790505b50905060005b828114610e8e57610e65858281518110610e5857610e57613e88565b5b602002602001015161198b565b828281518110610e7857610e77613e88565b5b6020026020010181905250806001019050610e3b565b508092505050919050565b610ea1611f12565b80601060006101000a81548160ff02191690831515021790555050565b6000610ec98261247e565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610f3b576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b610fab611f12565b610fb5600061270d565b565b600c54811115610ffc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff390613f29565b60405180910390fd5b600a548161100861244d565b6110129190613b6a565b1115611053576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104a90613bea565b60405180910390fd5b601060009054906101000a900460ff166110a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109990613f95565b60405180910390fd5b60008190506000601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600f54811080156111045750600b5461110261244d565b105b1561113d57600081600f546111199190613fb5565b90508084111561113657808461112f9190613fb5565b925061113b565b600092505b505b600e548261114b9190613fe9565b34101561118d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111849061409d565b60405180910390fd5b82601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546111dc9190613b6a565b925050819055506111ed3384612460565b505050565b6060600080600061120285610ed4565b905060008167ffffffffffffffff8111156112205761121f613296565b5b60405190808252806020026020018201604052801561124e5781602001602082028036833780820191505090505b509050611259612f20565b6000611263611f90565b90505b8386146113df57600460008281526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff161515151581525050915081604001516113d457600073ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff161461137957816000015194505b8773ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16036113d357808387806001019850815181106113c6576113c5613e88565b5b6020026020010181815250505b5b806001019050611266565b508195505050505050919050565b600e5481565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611425611f12565b80600e8190555050565b60606003805461143e90613a58565b80601f016020809104026020016040519081016040528092919081815260200182805461146a90613a58565b80156114b75780601f1061148c576101008083540402835291602001916114b7565b820191906000526020600020905b81548152906001019060200180831161149a57829003601f168201915b5050505050905090565b600f5481565b6060818310611502576040517f32c1995a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806000549050611512611f90565b85101561152457611521611f90565b94505b80841115611530578093505b600061153b87610ed4565b90508486101561155e576000868603905081811015611558578091505b50611563565b600090505b60008167ffffffffffffffff81111561157f5761157e613296565b5b6040519080825280602002602001820160405280156115ad5781602001602082028036833780820191505090505b509050600082036115c4578094505050505061177f565b60006115cf8861198b565b9050600081604001516115e457816000015190505b60008990505b8881141580156115fa5750848714155b1561177157600460008281526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509250826040015161176657600073ffffffffffffffffffffffffffffffffffffffff16836000015173ffffffffffffffffffffffffffffffffffffffff161461170b57826000015191505b8a73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611765578084888060010199508151811061175857611757613e88565b5b6020026020010181815250505b5b8060010190506115ea565b508583528296505050505050505b9392505050565b61178e611f12565b80600c8190555050565b6117a0611e58565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611804576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060076000611811611e58565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166118be611e58565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516119039190613017565b60405180910390a35050565b61191a848484611f99565b6119398373ffffffffffffffffffffffffffffffffffffffff166127d3565b801561194e575061194c848484846127f6565b155b15611985576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b611993612f20565b61199b612f20565b6119a3611f90565b8310806119b257506000548310155b156119c05780915050611aa3565b600460008481526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050806040015115611a965780915050611aa3565b611a9f8361247e565b9150505b919050565b6060611ab382611e0a565b611af2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae99061412f565b60405180910390fd5b6000611afc612946565b5111611b9257600d8054611b0f90613a58565b80601f0160208091040260200160405190810160405280929190818152602001828054611b3b90613a58565b8015611b885780601f10611b5d57610100808354040283529160200191611b88565b820191906000526020600020905b815481529060010190602001808311611b6b57829003601f168201915b5050505050611bc4565b611b9a612946565b611ba3836129d8565b604051602001611bb49291906141d7565b6040516020818303038152906040525b9050919050565b60116020528060005260406000206000915090505481565b600d8054611bf090613a58565b80601f0160208091040260200160405190810160405280929190818152602001828054611c1c90613a58565b8015611c695780601f10611c3e57610100808354040283529160200191611c69565b820191906000526020600020905b815481529060010190602001808311611c4c57829003601f168201915b505050505081565b611c79611f12565b80600f8190555050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611d1f611f12565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611d8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8590614278565b60405180910390fd5b611d978161270d565b50565b600c5481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600081611e15611f90565b11158015611e24575060005482105b8015611e51575060046000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b611f1a611e58565b73ffffffffffffffffffffffffffffffffffffffff16611f386113f3565b73ffffffffffffffffffffffffffffffffffffffff1614611f8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f85906142e4565b60405180910390fd5b565b60006001905090565b6000611fa48261247e565b90508373ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461200f576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff16612030611e58565b73ffffffffffffffffffffffffffffffffffffffff16148061205f575061205e85612059611e58565b611c83565b5b806120a4575061206d611e58565b73ffffffffffffffffffffffffffffffffffffffff1661208c84610a7b565b73ffffffffffffffffffffffffffffffffffffffff16145b9050806120dd576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612143576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6121508585856001612b38565b61215c60008487611e60565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600460008581526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060006001850190506000600460008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036123db5760005482146123da57878160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b505050828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46124468585856001612b3e565b5050505050565b6000612457611f90565b60005403905090565b61247a828260405180602001604052806000815250612b44565b5050565b612486612f20565b600082905080612494611f90565b111580156124a3575060005481105b156126d6576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff161515151581525050905080604001516126d457600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146125b8578092505050612708565b5b6001156126d357818060019003925050600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146126ce578092505050612708565b6125b9565b5b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261281c611e58565b8786866040518563ffffffff1660e01b815260040161283e9493929190614359565b6020604051808303816000875af192505050801561287a57506040513d601f19601f8201168201806040525081019061287791906143ba565b60015b6128f3573d80600081146128aa576040519150601f19603f3d011682016040523d82523d6000602084013e6128af565b606091505b5060008151036128eb576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b6060600d805461295590613a58565b80601f016020809104026020016040519081016040528092919081815260200182805461298190613a58565b80156129ce5780601f106129a3576101008083540402835291602001916129ce565b820191906000526020600020905b8154815290600101906020018083116129b157829003601f168201915b5050505050905090565b606060008203612a1f576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612b33565b600082905060005b60008214612a51578080612a3a906143e7565b915050600a82612a4a919061445e565b9150612a27565b60008167ffffffffffffffff811115612a6d57612a6c613296565b5b6040519080825280601f01601f191660200182016040528015612a9f5781602001600182028036833780820191505090505b5090505b60008514612b2c57600182612ab89190613fb5565b9150600a85612ac7919061448f565b6030612ad39190613b6a565b60f81b818381518110612ae957612ae8613e88565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612b25919061445e565b9450612aa3565b8093505050505b919050565b50505050565b50505050565b612b518383836001612b56565b505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603612bc2576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008403612bfc576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612c096000868387612b38565b83600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550846004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060008582019050838015612dd35750612dd28773ffffffffffffffffffffffffffffffffffffffff166127d3565b5b15612e98575b818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612e4860008884806001019550886127f6565b612e7e576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b808203612dd9578260005414612e9357600080fd5b612f03565b5b818060010192508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4808203612e99575b816000819055505050612f196000868387612b3e565b5050505050565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612fac81612f77565b8114612fb757600080fd5b50565b600081359050612fc981612fa3565b92915050565b600060208284031215612fe557612fe4612f6d565b5b6000612ff384828501612fba565b91505092915050565b60008115159050919050565b61301181612ffc565b82525050565b600060208201905061302c6000830184613008565b92915050565b6000819050919050565b61304581613032565b82525050565b6000602082019050613060600083018461303c565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156130a0578082015181840152602081019050613085565b60008484015250505050565b6000601f19601f8301169050919050565b60006130c882613066565b6130d28185613071565b93506130e2818560208601613082565b6130eb816130ac565b840191505092915050565b6000602082019050818103600083015261311081846130bd565b905092915050565b61312181613032565b811461312c57600080fd5b50565b60008135905061313e81613118565b92915050565b60006020828403121561315a57613159612f6d565b5b60006131688482850161312f565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061319c82613171565b9050919050565b6131ac81613191565b82525050565b60006020820190506131c760008301846131a3565b92915050565b6131d681613191565b81146131e157600080fd5b50565b6000813590506131f3816131cd565b92915050565b600080604083850312156132105761320f612f6d565b5b600061321e858286016131e4565b925050602061322f8582860161312f565b9150509250929050565b60008060006060848603121561325257613251612f6d565b5b6000613260868287016131e4565b9350506020613271868287016131e4565b92505060406132828682870161312f565b9150509250925092565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6132ce826130ac565b810181811067ffffffffffffffff821117156132ed576132ec613296565b5b80604052505050565b6000613300612f63565b905061330c82826132c5565b919050565b600067ffffffffffffffff82111561332c5761332b613296565b5b613335826130ac565b9050602081019050919050565b82818337600083830152505050565b600061336461335f84613311565b6132f6565b9050828152602081018484840111156133805761337f613291565b5b61338b848285613342565b509392505050565b600082601f8301126133a8576133a761328c565b5b81356133b8848260208601613351565b91505092915050565b6000602082840312156133d7576133d6612f6d565b5b600082013567ffffffffffffffff8111156133f5576133f4612f72565b5b61340184828501613393565b91505092915050565b600067ffffffffffffffff82111561342557613424613296565b5b602082029050602081019050919050565b600080fd5b600061344e6134498461340a565b6132f6565b9050808382526020820190506020840283018581111561347157613470613436565b5b835b8181101561349a5780613486888261312f565b845260208401935050602081019050613473565b5050509392505050565b600082601f8301126134b9576134b861328c565b5b81356134c984826020860161343b565b91505092915050565b6000602082840312156134e8576134e7612f6d565b5b600082013567ffffffffffffffff81111561350657613505612f72565b5b613512848285016134a4565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61355081613191565b82525050565b600067ffffffffffffffff82169050919050565b61357381613556565b82525050565b61358281612ffc565b82525050565b60608201600082015161359e6000850182613547565b5060208201516135b1602085018261356a565b5060408201516135c46040850182613579565b50505050565b60006135d68383613588565b60608301905092915050565b6000602082019050919050565b60006135fa8261351b565b6136048185613526565b935061360f83613537565b8060005b8381101561364057815161362788826135ca565b9750613632836135e2565b925050600181019050613613565b5085935050505092915050565b6000602082019050818103600083015261366781846135ef565b905092915050565b61367881612ffc565b811461368357600080fd5b50565b6000813590506136958161366f565b92915050565b6000602082840312156136b1576136b0612f6d565b5b60006136bf84828501613686565b91505092915050565b6000602082840312156136de576136dd612f6d565b5b60006136ec848285016131e4565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61372a81613032565b82525050565b600061373c8383613721565b60208301905092915050565b6000602082019050919050565b6000613760826136f5565b61376a8185613700565b935061377583613711565b8060005b838110156137a657815161378d8882613730565b975061379883613748565b925050600181019050613779565b5085935050505092915050565b600060208201905081810360008301526137cd8184613755565b905092915050565b6000806000606084860312156137ee576137ed612f6d565b5b60006137fc868287016131e4565b935050602061380d8682870161312f565b925050604061381e8682870161312f565b9150509250925092565b6000806040838503121561383f5761383e612f6d565b5b600061384d858286016131e4565b925050602061385e85828601613686565b9150509250929050565b600067ffffffffffffffff82111561388357613882613296565b5b61388c826130ac565b9050602081019050919050565b60006138ac6138a784613868565b6132f6565b9050828152602081018484840111156138c8576138c7613291565b5b6138d3848285613342565b509392505050565b600082601f8301126138f0576138ef61328c565b5b8135613900848260208601613899565b91505092915050565b6000806000806080858703121561392357613922612f6d565b5b6000613931878288016131e4565b9450506020613942878288016131e4565b93505060406139538782880161312f565b925050606085013567ffffffffffffffff81111561397457613973612f72565b5b613980878288016138db565b91505092959194509250565b6060820160008201516139a26000850182613547565b5060208201516139b5602085018261356a565b5060408201516139c86040850182613579565b50505050565b60006060820190506139e3600083018461398c565b92915050565b60008060408385031215613a00576139ff612f6d565b5b6000613a0e858286016131e4565b9250506020613a1f858286016131e4565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613a7057607f821691505b602082108103613a8357613a82613a29565b5b50919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000613abf601f83613071565b9150613aca82613a89565b602082019050919050565b60006020820190508181036000830152613aee81613ab2565b9050919050565b600081905092915050565b50565b6000613b10600083613af5565b9150613b1b82613b00565b600082019050919050565b6000613b3182613b03565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613b7582613032565b9150613b8083613032565b9250828201905080821115613b9857613b97613b3b565b5b92915050565b7f45786365656473206d617820737570706c790000000000000000000000000000600082015250565b6000613bd4601283613071565b9150613bdf82613b9e565b602082019050919050565b60006020820190508181036000830152613c0381613bc7565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302613c6c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613c2f565b613c768683613c2f565b95508019841693508086168417925050509392505050565b6000819050919050565b6000613cb3613cae613ca984613032565b613c8e565b613032565b9050919050565b6000819050919050565b613ccd83613c98565b613ce1613cd982613cba565b848454613c3c565b825550505050565b600090565b613cf6613ce9565b613d01818484613cc4565b505050565b5b81811015613d2557613d1a600082613cee565b600181019050613d07565b5050565b601f821115613d6a57613d3b81613c0a565b613d4484613c1f565b81016020851015613d53578190505b613d67613d5f85613c1f565b830182613d06565b50505b505050565b600082821c905092915050565b6000613d8d60001984600802613d6f565b1980831691505092915050565b6000613da68383613d7c565b9150826002028217905092915050565b613dbf82613066565b67ffffffffffffffff811115613dd857613dd7613296565b5b613de28254613a58565b613ded828285613d29565b600060209050601f831160018114613e205760008415613e0e578287015190505b613e188582613d9a565b865550613e80565b601f198416613e2e86613c0a565b60005b82811015613e5657848901518255600182019150602085019450602081019050613e31565b86831015613e735784890151613e6f601f891682613d7c565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f45786365656473204e465420706572207472616e73616374696f6e206c696d6960008201527f7400000000000000000000000000000000000000000000000000000000000000602082015250565b6000613f13602183613071565b9150613f1e82613eb7565b604082019050919050565b60006020820190508181036000830152613f4281613f06565b9050919050565b7f4d696e74696e67206973206e6f74206c697665207965742e0000000000000000600082015250565b6000613f7f601883613071565b9150613f8a82613f49565b602082019050919050565b60006020820190508181036000830152613fae81613f72565b9050919050565b6000613fc082613032565b9150613fcb83613032565b9250828203905081811115613fe357613fe2613b3b565b5b92915050565b6000613ff482613032565b9150613fff83613032565b925082820261400d81613032565b9150828204841483151761402457614023613b3b565b5b5092915050565b7f45746865722076616c75652073656e74206973206e6f7420737566666963696560008201527f6e74000000000000000000000000000000000000000000000000000000000000602082015250565b6000614087602283613071565b91506140928261402b565b604082019050919050565b600060208201905081810360008301526140b68161407a565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000614119602f83613071565b9150614124826140bd565b604082019050919050565b600060208201905081810360008301526141488161410c565b9050919050565b600081905092915050565b600061416582613066565b61416f818561414f565b935061417f818560208601613082565b80840191505092915050565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b60006141c160058361414f565b91506141cc8261418b565b600582019050919050565b60006141e3828561415a565b91506141ef828461415a565b91506141fa826141b4565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614262602683613071565b915061426d82614206565b604082019050919050565b6000602082019050818103600083015261429181614255565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006142ce602083613071565b91506142d982614298565b602082019050919050565b600060208201905081810360008301526142fd816142c1565b9050919050565b600081519050919050565b600082825260208201905092915050565b600061432b82614304565b614335818561430f565b9350614345818560208601613082565b61434e816130ac565b840191505092915050565b600060808201905061436e60008301876131a3565b61437b60208301866131a3565b614388604083018561303c565b818103606083015261439a8184614320565b905095945050505050565b6000815190506143b481612fa3565b92915050565b6000602082840312156143d0576143cf612f6d565b5b60006143de848285016143a5565b91505092915050565b60006143f282613032565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361442457614423613b3b565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061446982613032565b915061447483613032565b9250826144845761448361442f565b5b828204905092915050565b600061449a82613032565b91506144a583613032565b9250826144b5576144b461442f565b5b82820690509291505056fea2646970667358221220619d24f3be8a1f82e321a4e95ae7f1dfacf1911558b5e8e37c279a15d081384c64736f6c63430008110033