60806040525f60075f6101000a81548160ff02191690831515021790555034801562000029575f80fd5b506040516200543f3803806200543f83398181016040528101906200004f9190620004be565b8360405180602001604052805f8152506200007081620001e160201b60201c565b505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603620000e4575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401620000db91906200053e565b60405180910390fd5b620000f581620001f660201b60201c565b5060016004819055506200010f84620002b960201b60201c565b8360055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508260068190555081600760016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505062000898565b8060029081620001f29190620007b4565b5050565b5f60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160035f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002c96200035060201b60201c565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036200033c575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016200033391906200053e565b60405180910390fd5b6200034d81620001f660201b60201c565b50565b62000360620003f260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000386620003f960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620003f057620003b2620003f260201b60201c565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401620003e791906200053e565b60405180910390fd5b565b5f33905090565b5f60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f620004508262000425565b9050919050565b620004628162000444565b81146200046d575f80fd5b50565b5f81519050620004808162000457565b92915050565b5f819050919050565b6200049a8162000486565b8114620004a5575f80fd5b50565b5f81519050620004b8816200048f565b92915050565b5f805f8060808587031215620004d957620004d862000421565b5b5f620004e88782880162000470565b9450506020620004fb87828801620004a8565b93505060406200050e8782880162000470565b9250506060620005218782880162000470565b91505092959194509250565b620005388162000444565b82525050565b5f602082019050620005535f8301846200052d565b92915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680620005d557607f821691505b602082108103620005eb57620005ea62000590565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026200064f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000612565b6200065b868362000612565b95508019841693508086168417925050509392505050565b5f819050919050565b5f6200069c62000696620006908462000486565b62000673565b62000486565b9050919050565b5f819050919050565b620006b7836200067c565b620006cf620006c682620006a3565b8484546200061e565b825550505050565b5f90565b620006e5620006d7565b620006f2818484620006ac565b505050565b5b8181101562000719576200070d5f82620006db565b600181019050620006f8565b5050565b601f82111562000768576200073281620005f1565b6200073d8462000603565b810160208510156200074d578190505b620007656200075c8562000603565b830182620006f7565b50505b505050565b5f82821c905092915050565b5f6200078a5f19846008026200076d565b1980831691505092915050565b5f620007a4838362000779565b9150826002028217905092915050565b620007bf8262000559565b67ffffffffffffffff811115620007db57620007da62000563565b5b620007e78254620005bd565b620007f48282856200071d565b5f60209050601f8311600181146200082a575f841562000815578287015190505b62000821858262000797565b86555062000890565b601f1984166200083a86620005f1565b5f5b8281101562000863578489015182556001820191506020850194506020810190506200083c565b868310156200088357848901516200087f601f89168262000779565b8355505b6001600288020188555050505b505050505050565b614b9980620008a65f395ff3fe6080604052600436106101b5575f3560e01c80638da5cb5b116100eb578063aceb6cc611610089578063e985e9c511610063578063e985e9c51461060b578063eb7604af14610647578063f242432a14610683578063f2fde38b146106ab576101b5565b8063aceb6cc614610575578063cce7ec13146105b1578063de74e57b146105cd576101b5565b80639f3c50dd116100c55780639f3c50dd146104d55780639fe9f623146104fd578063a22cb46514610525578063a9059cbb1461054d576101b5565b80638da5cb5b14610467578063964bc33f146104915780639a2f6474146104b9576101b5565b80634e1273f41161015857806361ba27da1161013257806361ba27da146103d9578063715018a61461040157806377097fc81461041757806381257bd51461043f576101b5565b80634e1273f4146103395780634fb64be2146103755780635912c946146103b1576101b5565b806326b3a9541161019457806326b3a9541461026d5780632a55205a146102955780632eb2c2d6146102d25780634d03a9a5146102fa576101b5565b8062fdd58e146101b957806301ffc9a7146101f55780630e89341c14610231575b5f80fd5b3480156101c4575f80fd5b506101df60048036038101906101da91906130a0565b6106d3565b6040516101ec91906130ed565b60405180910390f35b348015610200575f80fd5b5061021b6004803603810190610216919061315b565b610728565b60405161022891906131a0565b60405180910390f35b34801561023c575f80fd5b50610257600480360381019061025291906131b9565b610809565b604051610264919061326e565b60405180910390f35b348015610278575f80fd5b50610293600480360381019061028e91906132b1565b61089b565b005b3480156102a0575f80fd5b506102bb60048036038101906102b69190613301565b6109ce565b6040516102c992919061334e565b60405180910390f35b3480156102dd575f80fd5b506102f860048036038101906102f39190613565565b610a2a565b005b348015610305575f80fd5b50610320600480360381019061031b9190613301565b610ad1565b6040516103309493929190613630565b60405180910390f35b348015610344575f80fd5b5061035f600480360381019061035a9190613733565b610b42565b60405161036c9190613860565b60405180910390f35b348015610380575f80fd5b5061039b600480360381019061039691906131b9565b610c49565b6040516103a89190613999565b60405180910390f35b3480156103bc575f80fd5b506103d760048036038101906103d29190613301565b610d38565b005b3480156103e4575f80fd5b506103ff60048036038101906103fa91906131b9565b610ef0565b005b34801561040c575f80fd5b50610415610f02565b005b348015610422575f80fd5b5061043d60048036038101906104389190613a57565b610f15565b005b34801561044a575f80fd5b5061046560048036038101906104609190613301565b610f8f565b005b348015610472575f80fd5b5061047b6111bf565b6040516104889190613ab1565b60405180910390f35b34801561049c575f80fd5b506104b760048036038101906104b291906131b9565b6111e7565b005b6104d360048036038101906104ce91906131b9565b6112c2565b005b3480156104e0575f80fd5b506104fb60048036038101906104f691906131b9565b611443565b005b348015610508575f80fd5b50610523600480360381019061051e9190613af4565b6115d4565b005b348015610530575f80fd5b5061054b60048036038101906105469190613b1f565b6115f8565b005b348015610558575f80fd5b50610573600480360381019061056e91906130a0565b61160e565b005b348015610580575f80fd5b5061059b600480360381019061059691906131b9565b611681565b6040516105a891906130ed565b60405180910390f35b6105cb60048036038101906105c691906130a0565b611819565b005b3480156105d8575f80fd5b506105f360048036038101906105ee91906131b9565b611aeb565b60405161060293929190613bd0565b60405180910390f35b348015610616575f80fd5b50610631600480360381019061062c9190613c05565b611b2a565b60405161063e91906131a0565b60405180910390f35b348015610652575f80fd5b5061066d600480360381019061066891906131b9565b611bb8565b60405161067a91906131a0565b60405180910390f35b34801561068e575f80fd5b506106a960048036038101906106a49190613c43565b611bde565b005b3480156106b6575f80fd5b506106d160048036038101906106cc9190613cd6565b611c40565b005b5f805f8381526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f7fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806107f257507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610802575061080182611cc4565b5b9050919050565b60606002805461081890613d2e565b80601f016020809104026020016040519081016040528092919081815260200182805461084490613d2e565b801561088f5780601f106108665761010080835404028352916020019161088f565b820191905f5260205f20905b81548152906001019060200180831161087257829003601f168201915b50505050509050919050565b6108a481611d2d565b6108e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108da90613da8565b60405180910390fd5b5f6108ee33856106d3565b1161092e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092590613e36565b60405180910390fd5b604051806060016040528083815260200182600281111561095257610951613b5d565b5b815260200160011515815250600b5f8581526020019081526020015f205f820151815f01556020820151816001015f6101000a81548160ff021916908360028111156109a1576109a0613b5d565b5b021790555060408201518160010160016101000a81548160ff021916908315150217905550905050505050565b5f805f6109f960646109eb60065487611db990919063ffffffff16565b611dce90919063ffffffff16565b905060055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168192509250509250929050565b5f610a33611de3565b90508073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614158015610a785750610a768682611b2a565b155b15610abc5780866040517fe237d922000000000000000000000000000000000000000000000000000000008152600401610ab3929190613e54565b60405180910390fd5b610ac98686868686611dea565b505050505050565b6009602052815f5260405f208181548110610aea575f80fd5b905f5260205f2090600402015f9150915050805f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806001015490806002015490806003015f9054906101000a900460ff16905084565b60608151835114610b8e57815183516040517f5b059991000000000000000000000000000000000000000000000000000000008152600401610b85929190613e7b565b60405180910390fd5b5f835167ffffffffffffffff811115610baa57610ba9613379565b5b604051908082528060200260200182016040528015610bd85781602001602082028036833780820191505090505b5090505f5b8451811015610c3e57610c14610bfc8287611ede90919063ffffffff16565b610c0f8387611ef190919063ffffffff16565b6106d3565b828281518110610c2757610c26613ea2565b5b602002602001018181525050806001019050610bdd565b508091505092915050565b606060095f8381526020019081526020015f20805480602002602001604051908101604052809291908181526020015f905b82821015610d2d578382905f5260205f2090600402016040518060800160405290815f82015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820154815260200160028201548152602001600382015f9054906101000a900460ff16151515158152505081526020019060010190610c7b565b505050509050919050565b610d40611f04565b5f60095f8481526020019081526020015f208281548110610d6457610d63613ea2565b5b905f5260205f2090600402016040518060800160405290815f82015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820154815260200160028201548152602001600382015f9054906101000a900460ff16151515158152505090508060600151610e43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3a90613f19565b60405180910390fd5b5f610e4e33856106d3565b11610e8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8590613fa7565b60405180910390fd5b805f015173ffffffffffffffffffffffffffffffffffffffff166108fc826020015190811502906040515f60405180830381858888f19350505050158015610ed8573d5f803e3d5ffd5b50610ee38383611f53565b50610eec61214e565b5050565b610ef8612158565b8060068190555050565b610f0a612158565b610f135f6121df565b565b610f1d612158565b610f5960055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683600160405180602001604052805f8152506122a2565b610f6281612337565b6001600a5f8481526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b610f97611f04565b5f60095f8481526020019081526020015f208281548110610fbb57610fba613ea2565b5b905f5260205f2090600402016040518060800160405290815f82015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820154815260200160028201548152602001600382015f9054906101000a900460ff1615151515815250509050806060015161109a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109190613f19565b60405180910390fd5b5f6110a533856106d3565b116110e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110dc90614035565b60405180910390fd5b600a5f8481526020019081526020015f205f9054906101000a900460ff16611142576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111399061409d565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc826020015190811502906040515f60405180830381858888f19350505050158015611189573d5f803e3d5ffd5b506111a933825f015185600160405180602001604052805f81525061234a565b6111b283612450565b506111bb61214e565b5050565b5f60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600b5f8281526020019081526020015f2060010160019054906101000a900460ff16611248576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123f90614105565b60405180910390fd5b5f61125333836106d3565b11611293576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128a90614193565b60405180910390fd5b5f600b5f8381526020019081526020015f2060010160016101000a81548160ff02191690831515021790555050565b5f3411611304576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112fb90614221565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff166108fc3490811502906040515f60405180830381858888f19350505050158015611347573d5f803e3d5ffd5b5060095f8281526020019081526020015f2060405180608001604052803373ffffffffffffffffffffffffffffffffffffffff1681526020013481526020016201518042611395919061426c565b815260200160011515815250908060018154018082558091505060019003905f5260205f2090600402015f909190919091505f820151815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010155604082015181600201556060820151816003015f6101000a81548160ff021916908315150217905550505050565b61144b611f04565b5f5b60095f8381526020019081526020015f20805490508110156115c85760095f8381526020019081526020015f20818154811061148c5761148b613ea2565b5b905f5260205f2090600402016003015f9054906101000a900460ff1680156114e5575060095f8381526020019081526020015f2081815481106114d2576114d1613ea2565b5b905f5260205f2090600402016002015442115b156115bb5760095f8381526020019081526020015f20818154811061150d5761150c613ea2565b5b905f5260205f2090600402015f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc60095f8581526020019081526020015f20838154811061157757611576613ea2565b5b905f5260205f2090600402016001015490811502906040515f60405180830381858888f193505050501580156115af573d5f803e3d5ffd5b506115ba8282611f53565b5b808060010191505061144d565b506115d161214e565b50565b6115dc612158565b8060075f6101000a81548160ff02191690831515021790555050565b61160a611603611de3565b838361246f565b5050565b611616612158565b5f61162133836106d3565b11611661576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116589061430f565b60405180910390fd5b61167d338383600160405180602001604052805f81525061234a565b5050565b5f80600b5f8481526020019081526020015f206040518060600160405290815f8201548152602001600182015f9054906101000a900460ff1660028111156116cc576116cb613b5d565b5b60028111156116de576116dd613b5d565b5b81526020016001820160019054906101000a900460ff16151515158152505090505f815f015190505f826020015190505f6001600281111561172357611722613b5d565b5b82600281111561173657611735613b5d565b5b036117725761176b6117466125d8565b61175d6305f5e10086611db990919063ffffffff16565b611dce90919063ffffffff16565b905061180d565b60028081111561178557611784613b5d565b5b82600281111561179857611797613b5d565b5b03611808575f6117ce6117a9612676565b6117c06305f5e10087611db990919063ffffffff16565b611dce90919063ffffffff16565b90506118006117db6125d8565b6117f26305f5e10084611db990919063ffffffff16565b611dce90919063ffffffff16565b91505061180c565b8290505b5b80945050505050919050565b611821611f04565b600b5f8281526020019081526020015f2060010160019054906101000a900460ff16611882576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187990614377565b60405180910390fd5b5f600b5f8381526020019081526020015f206040518060600160405290815f8201548152602001600182015f9054906101000a900460ff1660028111156118cc576118cb613b5d565b5b60028111156118de576118dd613b5d565b5b81526020016001820160019054906101000a900460ff16151515158152505090505f815f015190505f826020015190505f6001600281111561192357611922613b5d565b5b82600281111561193657611935613b5d565b5b036119725761196b6119466125d8565b61195d6305f5e10086611db990919063ffffffff16565b611dce90919063ffffffff16565b9050611a0d565b60028081111561198557611984613b5d565b5b82600281111561199857611997613b5d565b5b03611a08575f6119ce6119a9612676565b6119c06305f5e10087611db990919063ffffffff16565b611dce90919063ffffffff16565b9050611a006119db6125d8565b6119f26305f5e10084611db990919063ffffffff16565b611dce90919063ffffffff16565b915050611a0c565b8290505b5b803414611a4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a46906143df565b60405180910390fd5b8573ffffffffffffffffffffffffffffffffffffffff166108fc3490811502906040515f60405180830381858888f19350505050158015611a92573d5f803e3d5ffd5b50611aaf863387600160405180602001604052805f81525061234a565b5f600b5f8781526020019081526020015f2060010160016101000a81548160ff02191690831515021790555050505050611ae761214e565b5050565b600b602052805f5260405f205f91509050805f015490806001015f9054906101000a900460ff16908060010160019054906101000a900460ff16905083565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b5f600a5f8381526020019081526020015f205f9054906101000a900460ff169050919050565b60075f9054906101000a900460ff16611c2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2390614447565b60405180910390fd5b611c398585858585612713565b5050505050565b611c48612158565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611cb8575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401611caf9190613ab1565b60405180910390fd5b611cc1816121df565b50565b5f7f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b5f806002811115611d4157611d40613b5d565b5b826002811115611d5457611d53613b5d565b5b1480611d84575060016002811115611d6f57611d6e613b5d565b5b826002811115611d8257611d81613b5d565b5b145b80611db25750600280811115611d9d57611d9c613b5d565b5b826002811115611db057611daf613b5d565b5b145b9050919050565b5f8183611dc69190614465565b905092915050565b5f8183611ddb91906144d3565b905092915050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611e5a575f6040517f57f447ce000000000000000000000000000000000000000000000000000000008152600401611e519190613ab1565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603611eca575f6040517f01a83514000000000000000000000000000000000000000000000000000000008152600401611ec19190613ab1565b60405180910390fd5b611ed785858585856127ba565b5050505050565b5f60208202602084010151905092915050565b5f60208202602084010151905092915050565b600260045403611f49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f409061454d565b60405180910390fd5b6002600481905550565b60095f8381526020019081526020015f20805490508110611fa9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa0906145b5565b60405180910390fd5b60095f8381526020019081526020015f20600160095f8581526020019081526020015f2080549050611fdb91906145d3565b81548110611fec57611feb613ea2565b5b905f5260205f20906004020160095f8481526020019081526020015f20828154811061201b5761201a613ea2565b5b905f5260205f2090600402015f82015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001820154816001015560028201548160020155600382015f9054906101000a900460ff16816003015f6101000a81548160ff02191690831515021790555090505060095f8381526020019081526020015f208054806120ed576120ec614606565b5b600190038181905f5260205f2090600402015f8082015f6101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600182015f9055600282015f9055600382015f6101000a81549060ff0219169055505090555050565b6001600481905550565b612160611de3565b73ffffffffffffffffffffffffffffffffffffffff1661217e6111bf565b73ffffffffffffffffffffffffffffffffffffffff16146121dd576121a1611de3565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016121d49190613ab1565b60405180910390fd5b565b5f60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160035f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612312575f6040517f57f447ce0000000000000000000000000000000000000000000000000000000081526004016123099190613ab1565b60405180910390fd5b5f8061231e8585612866565b9150915061232f5f878484876127ba565b505050505050565b806002908161234691906147d0565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036123ba575f6040517f57f447ce0000000000000000000000000000000000000000000000000000000081526004016123b19190613ab1565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff160361242a575f6040517f01a835140000000000000000000000000000000000000000000000000000000081526004016124219190613ab1565b60405180910390fd5b5f806124368585612866565b9150915061244787878484876127ba565b50505050505050565b60095f8281526020019081526020015f205f61246c9190612f84565b50565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036124df575f6040517fced3e1000000000000000000000000000000000000000000000000000000000081526004016124d69190613ab1565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516125cb91906131a0565b60405180910390a3505050565b5f80600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015612645573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126699190614925565b5050509150508091505090565b5f8060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156126e2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127069190614925565b5050509150508091505090565b5f61271c611de3565b90508073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614158015612761575061275f8682611b2a565b155b156127a55780866040517fe237d92200000000000000000000000000000000000000000000000000000000815260040161279c929190613e54565b60405180910390fd5b6127b2868686868661234a565b505050505050565b6127c685858585612896565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161461285f575f612802611de3565b9050600184510361284e575f6128215f86611ef190919063ffffffff16565b90505f6128375f86611ef190919063ffffffff16565b9050612847838989858589612c26565b505061285d565b61285c818787878787612dd5565b5b505b5050505050565b60608060405191506001825283602083015260408201905060018152826020820152604081016040529250929050565b80518251146128e057815181516040517f5b0599910000000000000000000000000000000000000000000000000000000081526004016128d7929190613e7b565b60405180910390fd5b5f6128e9611de3565b90505f5b8351811015612ae5575f61290a8286611ef190919063ffffffff16565b90505f6129208386611ef190919063ffffffff16565b90505f73ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614612a43575f805f8481526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156129ef57888183856040517f03dee4c50000000000000000000000000000000000000000000000000000000081526004016129e6949392919061499c565b60405180910390fd5b8181035f808581526020019081526020015f205f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614612ad857805f808481526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254612ad0919061426c565b925050819055505b50508060010190506128ed565b506001835103612ba0575f612b035f85611ef190919063ffffffff16565b90505f612b195f85611ef190919063ffffffff16565b90508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628585604051612b91929190613e7b565b60405180910390a45050612c1f565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051612c169291906149df565b60405180910390a45b5050505050565b5f8473ffffffffffffffffffffffffffffffffffffffff163b1115612dcd578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401612c86959493929190614a66565b6020604051808303815f875af1925050508015612cc157506040513d601f19601f82011682018060405250810190612cbe9190614ad2565b60015b612d42573d805f8114612cef576040519150601f19603f3d011682016040523d82523d5f602084013e612cf4565b606091505b505f815103612d3a57846040517f57f447ce000000000000000000000000000000000000000000000000000000008152600401612d319190613ab1565b60405180910390fd5b805181602001fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612dcb57846040517f57f447ce000000000000000000000000000000000000000000000000000000008152600401612dc29190613ab1565b60405180910390fd5b505b505050505050565b5f8473ffffffffffffffffffffffffffffffffffffffff163b1115612f7c578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401612e35959493929190614afd565b6020604051808303815f875af1925050508015612e7057506040513d601f19601f82011682018060405250810190612e6d9190614ad2565b60015b612ef1573d805f8114612e9e576040519150601f19603f3d011682016040523d82523d5f602084013e612ea3565b606091505b505f815103612ee957846040517f57f447ce000000000000000000000000000000000000000000000000000000008152600401612ee09190613ab1565b60405180910390fd5b805181602001fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612f7a57846040517f57f447ce000000000000000000000000000000000000000000000000000000008152600401612f719190613ab1565b60405180910390fd5b505b505050505050565b5080545f8255600402905f5260205f2090810190612fa29190612fa5565b50565b5b80821115612ffe575f8082015f6101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600182015f9055600282015f9055600382015f6101000a81549060ff021916905550600401612fa6565b5090565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61303c82613013565b9050919050565b61304c81613032565b8114613056575f80fd5b50565b5f8135905061306781613043565b92915050565b5f819050919050565b61307f8161306d565b8114613089575f80fd5b50565b5f8135905061309a81613076565b92915050565b5f80604083850312156130b6576130b561300b565b5b5f6130c385828601613059565b92505060206130d48582860161308c565b9150509250929050565b6130e78161306d565b82525050565b5f6020820190506131005f8301846130de565b92915050565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61313a81613106565b8114613144575f80fd5b50565b5f8135905061315581613131565b92915050565b5f602082840312156131705761316f61300b565b5b5f61317d84828501613147565b91505092915050565b5f8115159050919050565b61319a81613186565b82525050565b5f6020820190506131b35f830184613191565b92915050565b5f602082840312156131ce576131cd61300b565b5b5f6131db8482850161308c565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561321b578082015181840152602081019050613200565b5f8484015250505050565b5f601f19601f8301169050919050565b5f613240826131e4565b61324a81856131ee565b935061325a8185602086016131fe565b61326381613226565b840191505092915050565b5f6020820190508181035f8301526132868184613236565b905092915050565b6003811061329a575f80fd5b50565b5f813590506132ab8161328e565b92915050565b5f805f606084860312156132c8576132c761300b565b5b5f6132d58682870161308c565b93505060206132e68682870161308c565b92505060406132f78682870161329d565b9150509250925092565b5f80604083850312156133175761331661300b565b5b5f6133248582860161308c565b92505060206133358582860161308c565b9150509250929050565b61334881613032565b82525050565b5f6040820190506133615f83018561333f565b61336e60208301846130de565b9392505050565b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6133af82613226565b810181811067ffffffffffffffff821117156133ce576133cd613379565b5b80604052505050565b5f6133e0613002565b90506133ec82826133a6565b919050565b5f67ffffffffffffffff82111561340b5761340a613379565b5b602082029050602081019050919050565b5f80fd5b5f61343261342d846133f1565b6133d7565b905080838252602082019050602084028301858111156134555761345461341c565b5b835b8181101561347e578061346a888261308c565b845260208401935050602081019050613457565b5050509392505050565b5f82601f83011261349c5761349b613375565b5b81356134ac848260208601613420565b91505092915050565b5f80fd5b5f67ffffffffffffffff8211156134d3576134d2613379565b5b6134dc82613226565b9050602081019050919050565b828183375f83830152505050565b5f613509613504846134b9565b6133d7565b905082815260208101848484011115613525576135246134b5565b5b6135308482856134e9565b509392505050565b5f82601f83011261354c5761354b613375565b5b813561355c8482602086016134f7565b91505092915050565b5f805f805f60a0868803121561357e5761357d61300b565b5b5f61358b88828901613059565b955050602061359c88828901613059565b945050604086013567ffffffffffffffff8111156135bd576135bc61300f565b5b6135c988828901613488565b935050606086013567ffffffffffffffff8111156135ea576135e961300f565b5b6135f688828901613488565b925050608086013567ffffffffffffffff8111156136175761361661300f565b5b61362388828901613538565b9150509295509295909350565b5f6080820190506136435f83018761333f565b61365060208301866130de565b61365d60408301856130de565b61366a6060830184613191565b95945050505050565b5f67ffffffffffffffff82111561368d5761368c613379565b5b602082029050602081019050919050565b5f6136b06136ab84613673565b6133d7565b905080838252602082019050602084028301858111156136d3576136d261341c565b5b835b818110156136fc57806136e88882613059565b8452602084019350506020810190506136d5565b5050509392505050565b5f82601f83011261371a57613719613375565b5b813561372a84826020860161369e565b91505092915050565b5f80604083850312156137495761374861300b565b5b5f83013567ffffffffffffffff8111156137665761376561300f565b5b61377285828601613706565b925050602083013567ffffffffffffffff8111156137935761379261300f565b5b61379f85828601613488565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6137db8161306d565b82525050565b5f6137ec83836137d2565b60208301905092915050565b5f602082019050919050565b5f61380e826137a9565b61381881856137b3565b9350613823836137c3565b805f5b8381101561385357815161383a88826137e1565b9750613845836137f8565b925050600181019050613826565b5085935050505092915050565b5f6020820190508181035f8301526138788184613804565b905092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6138b281613032565b82525050565b6138c181613186565b82525050565b608082015f8201516138db5f8501826138a9565b5060208201516138ee60208501826137d2565b50604082015161390160408501826137d2565b50606082015161391460608501826138b8565b50505050565b5f61392583836138c7565b60808301905092915050565b5f602082019050919050565b5f61394782613880565b613951818561388a565b935061395c8361389a565b805f5b8381101561398c578151613973888261391a565b975061397e83613931565b92505060018101905061395f565b5085935050505092915050565b5f6020820190508181035f8301526139b1818461393d565b905092915050565b5f67ffffffffffffffff8211156139d3576139d2613379565b5b6139dc82613226565b9050602081019050919050565b5f6139fb6139f6846139b9565b6133d7565b905082815260208101848484011115613a1757613a166134b5565b5b613a228482856134e9565b509392505050565b5f82601f830112613a3e57613a3d613375565b5b8135613a4e8482602086016139e9565b91505092915050565b5f8060408385031215613a6d57613a6c61300b565b5b5f613a7a8582860161308c565b925050602083013567ffffffffffffffff811115613a9b57613a9a61300f565b5b613aa785828601613a2a565b9150509250929050565b5f602082019050613ac45f83018461333f565b92915050565b613ad381613186565b8114613add575f80fd5b50565b5f81359050613aee81613aca565b92915050565b5f60208284031215613b0957613b0861300b565b5b5f613b1684828501613ae0565b91505092915050565b5f8060408385031215613b3557613b3461300b565b5b5f613b4285828601613059565b9250506020613b5385828601613ae0565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b60038110613b9b57613b9a613b5d565b5b50565b5f819050613bab82613b8a565b919050565b5f613bba82613b9e565b9050919050565b613bca81613bb0565b82525050565b5f606082019050613be35f8301866130de565b613bf06020830185613bc1565b613bfd6040830184613191565b949350505050565b5f8060408385031215613c1b57613c1a61300b565b5b5f613c2885828601613059565b9250506020613c3985828601613059565b9150509250929050565b5f805f805f60a08688031215613c5c57613c5b61300b565b5b5f613c6988828901613059565b9550506020613c7a88828901613059565b9450506040613c8b8882890161308c565b9350506060613c9c8882890161308c565b925050608086013567ffffffffffffffff811115613cbd57613cbc61300f565b5b613cc988828901613538565b9150509295509295909350565b5f60208284031215613ceb57613cea61300b565b5b5f613cf884828501613059565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680613d4557607f821691505b602082108103613d5857613d57613d01565b5b50919050565b7f496e76616c69642063757272656e6379207479706500000000000000000000005f82015250565b5f613d926015836131ee565b9150613d9d82613d5e565b602082019050919050565b5f6020820190508181035f830152613dbf81613d86565b9050919050565b7f596f75206d757374206f776e2074686520746f6b656e20746f206c69737420695f8201527f7400000000000000000000000000000000000000000000000000000000000000602082015250565b5f613e206021836131ee565b9150613e2b82613dc6565b604082019050919050565b5f6020820190508181035f830152613e4d81613e14565b9050919050565b5f604082019050613e675f83018561333f565b613e74602083018461333f565b9392505050565b5f604082019050613e8e5f8301856130de565b613e9b60208301846130de565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e6f20616374697665206f6666657220666f72207468697320746f6b656e00005f82015250565b5f613f03601e836131ee565b9150613f0e82613ecf565b602082019050919050565b5f6020820190508181035f830152613f3081613ef7565b9050919050565b7f596f75206d757374206f776e2074686520746f6b656e20746f2072656a6563745f8201527f206f666665720000000000000000000000000000000000000000000000000000602082015250565b5f613f916026836131ee565b9150613f9c82613f37565b604082019050919050565b5f6020820190508181035f830152613fbe81613f85565b9050919050565b7f596f75206d757374206f776e2074686520746f6b656e20746f206163636570745f8201527f206f666665720000000000000000000000000000000000000000000000000000602082015250565b5f61401f6026836131ee565b915061402a82613fc5565b604082019050919050565b5f6020820190508181035f83015261404c81614013565b9050919050565b7f546f6b656e206e6f74206d696e746564000000000000000000000000000000005f82015250565b5f6140876010836131ee565b915061409282614053565b602082019050919050565b5f6020820190508181035f8301526140b48161407b565b9050919050565b7f546f6b656e206973206e6f74206c6973746564000000000000000000000000005f82015250565b5f6140ef6013836131ee565b91506140fa826140bb565b602082019050919050565b5f6020820190508181035f83015261411c816140e3565b9050919050565b7f596f75206d757374206f776e2074686520746f6b656e20746f2064656c6973745f8201527f2069740000000000000000000000000000000000000000000000000000000000602082015250565b5f61417d6023836131ee565b915061418882614123565b604082019050919050565b5f6020820190508181035f8301526141aa81614171565b9050919050565b7f4f6666657220616d6f756e74206d7573742062652067726561746572207468615f8201527f6e207a65726f0000000000000000000000000000000000000000000000000000602082015250565b5f61420b6026836131ee565b9150614216826141b1565b604082019050919050565b5f6020820190508181035f830152614238816141ff565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6142768261306d565b91506142818361306d565b92508282019050808211156142995761429861423f565b5b92915050565b7f596f75206d757374206f776e2074686520746f6b656e20746f207472616e73665f8201527f6572206974000000000000000000000000000000000000000000000000000000602082015250565b5f6142f96025836131ee565b91506143048261429f565b604082019050919050565b5f6020820190508181035f830152614326816142ed565b9050919050565b7f546f6b656e206e6f74206c697374656420666f722073616c65000000000000005f82015250565b5f6143616019836131ee565b915061436c8261432d565b602082019050919050565b5f6020820190508181035f83015261438e81614355565b9050919050565b7f496e636f72726563742045544820616d6f756e742073656e74000000000000005f82015250565b5f6143c96019836131ee565b91506143d482614395565b602082019050919050565b5f6020820190508181035f8301526143f6816143bd565b9050919050565b7f5472616e7366657273206172652063757272656e746c792064697361626c65645f82015250565b5f6144316020836131ee565b915061443c826143fd565b602082019050919050565b5f6020820190508181035f83015261445e81614425565b9050919050565b5f61446f8261306d565b915061447a8361306d565b92508282026144888161306d565b9150828204841483151761449f5761449e61423f565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6144dd8261306d565b91506144e88361306d565b9250826144f8576144f76144a6565b5b828204905092915050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c005f82015250565b5f614537601f836131ee565b915061454282614503565b602082019050919050565b5f6020820190508181035f8301526145648161452b565b9050919050565b7f496e76616c6964206f6666657220696e646578000000000000000000000000005f82015250565b5f61459f6013836131ee565b91506145aa8261456b565b602082019050919050565b5f6020820190508181035f8301526145cc81614593565b9050919050565b5f6145dd8261306d565b91506145e88361306d565b9250828203905081811115614600576145ff61423f565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830261468f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82614654565b6146998683614654565b95508019841693508086168417925050509392505050565b5f819050919050565b5f6146d46146cf6146ca8461306d565b6146b1565b61306d565b9050919050565b5f819050919050565b6146ed836146ba565b6147016146f9826146db565b848454614660565b825550505050565b5f90565b614715614709565b6147208184846146e4565b505050565b5b81811015614743576147385f8261470d565b600181019050614726565b5050565b601f8211156147885761475981614633565b61476284614645565b81016020851015614771578190505b61478561477d85614645565b830182614725565b50505b505050565b5f82821c905092915050565b5f6147a85f198460080261478d565b1980831691505092915050565b5f6147c08383614799565b9150826002028217905092915050565b6147d9826131e4565b67ffffffffffffffff8111156147f2576147f1613379565b5b6147fc8254613d2e565b614807828285614747565b5f60209050601f831160018114614838575f8415614826578287015190505b61483085826147b5565b865550614897565b601f19841661484686614633565b5f5b8281101561486d57848901518255600182019150602085019450602081019050614848565b8683101561488a5784890151614886601f891682614799565b8355505b6001600288020188555050505b505050505050565b5f69ffffffffffffffffffff82169050919050565b6148bd8161489f565b81146148c7575f80fd5b50565b5f815190506148d8816148b4565b92915050565b5f819050919050565b6148f0816148de565b81146148fa575f80fd5b50565b5f8151905061490b816148e7565b92915050565b5f8151905061491f81613076565b92915050565b5f805f805f60a0868803121561493e5761493d61300b565b5b5f61494b888289016148ca565b955050602061495c888289016148fd565b945050604061496d88828901614911565b935050606061497e88828901614911565b925050608061498f888289016148ca565b9150509295509295909350565b5f6080820190506149af5f83018761333f565b6149bc60208301866130de565b6149c960408301856130de565b6149d660608301846130de565b95945050505050565b5f6040820190508181035f8301526149f78185613804565b90508181036020830152614a0b8184613804565b90509392505050565b5f81519050919050565b5f82825260208201905092915050565b5f614a3882614a14565b614a428185614a1e565b9350614a528185602086016131fe565b614a5b81613226565b840191505092915050565b5f60a082019050614a795f83018861333f565b614a86602083018761333f565b614a9360408301866130de565b614aa060608301856130de565b8181036080830152614ab28184614a2e565b90509695505050505050565b5f81519050614acc81613131565b92915050565b5f60208284031215614ae757614ae661300b565b5b5f614af484828501614abe565b91505092915050565b5f60a082019050614b105f83018861333f565b614b1d602083018761333f565b8181036040830152614b2f8186613804565b90508181036060830152614b438185613804565b90508181036080830152614b578184614a2e565b9050969550505050505056fea26469706673582212205f3ed7438b2e01cbb0c47ba0a9b26a30b50e56b1cf1a1b7e87456f1fb2ca157d64736f6c63430008180033000000000000000000000000fd8cd1da32884e57bc5196d421318fbf9c3e0d4a000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000694aa1769357215de4fac081bf1f309adc3253060000000000000000000000001a81afb8146aeffcfc5e50e8479e826e7d55b910